2017-06-26 18 views
0

私はRequireJSを使い、簡単な検証ライブラリを作成しています。私はオブジェクトを関数でいっぱいに戻していますが、これらの関数の1つを、別の関数によって配置されたイベントハンドラ内から呼び出させたいとします。イベント内から同じオブジェクトの関数を呼び出す

define(['jquery'], function($) { 
    return { 
     ... 
     checkPageValidation: function(){ 
      //Check page validation, enable/disable submit button 
      ... 
     }, 
     addValidationToControl: function(controlId, validatingFunction, comparisonControlId){ 
      //Add the validation function to the focus out event 
      var $control = $("#" + controlId); 
      ... 
      $control.focusout(function (evnt){ 
       let $this = $(this); //this is the control that fired the event 
       if(validatingFunction($this.val()){ 
        ... 
       } else { 
        ... 
       } 
       checkPageValidation(); //How to call this function? 
      } 
     } 
    } 
}); 

checkPageValidation()の機能はどのように呼び出しますか。

答えて

0

初期化中にオブジェクトを参照することはできません。代わりにコンストラクタを作成し、このキーワードを使用して呼び出します。

あなたは申し訳ありませんが、 `その時点でthis`がある

define(['jquery'], function($) { 
     var validation = function(){ 
      //Check page validation, enable/disable submit button 
      ... 
     }; 
    return { 
     ... 
     checkPageValidation: validation, 
     addValidationToControl: function(controlId, validatingFunction, comparisonControlId){ 
      //Add the validation function to the focus out event 
      var $control = $("#" + controlId); 
      ... 
      $control.focusout(function (evnt){ 
       let $this = $(this); //this is the control that fired the event 
       if(validatingFunction($this.val()){ 
        ... 
       } else { 
        ... 
       } 
       validation(); //call using this keyword 
      } 
     } 
    } 
}); 
+1

を返す前に変数を作成しこのキーワード

this.checkPageValidation(); 

OR

を使用して関数を呼び出すことができますしたがって、 'Uncaught TypeError:これがイベントを発生させた' 'です。 checkPageValidationは関数ではありません。 –

+0

変更を親切に調べました –

+0

これは 'this'がjsオブジェクトではなく' this.validation() 'が存在しないという問題を回避しません。 –

関連する問題