2017-08-24 6 views
0

jqueryの.on( "click")イベントに対してハンドラが実行される前に確認ダイアログチェックを追加しようとしています。これは、元のです:私が試した.on()イベントハンドラの前に確認ダイアログチェックを追加します。

$(this.var_mainSelector).on("click", 
    this.var_acceptOfferSelector, 
    this.onAcceptOffer 
); 

:事前に

$(this.var_mainSelector).on("click", this.var_acceptOfferSelector, 
    function() { 
     var test = confirm("are u sure?"); 
     if(test) { 
      this.onAcceptOffer 
     } 
    } 

ありがとう!

答えて

2

);閉包自体が新しい「this」を定義するので、this.onAcceptOfferはもう定義されません。

ソリューション

1)functionを使用しないでください)自己に

var self = this; 
$(this.var_mainSelector).on("click", this.var_acceptOfferSelector, function(evt) { 
    var test = confirm("are u sure?"); 
    if(test) { 
     self.onAcceptOffer.call(this, evt); 
    } 
}); 

2を、これを保存します。代わりに()=>

$(this.var_mainSelector).on("click", this.var_acceptOfferSelector, (evt)=>{ 
    var test = confirm("are u sure?"); 
    if(test) { 
     this.onAcceptOffer.call(null, evt); // original "this" (the clicked element) is lost 
    } 
}); 

矢印関数を使用します( "()=>"))あなたが関数 `self.onAcceptOfferを(呼び出す必要が機能

+1

のコンテキストを変更していない' – Barmar

+0

@Barmarは既に修正しました: ) –

+0

ありがとうございます。ジョシュアKはその答えだけでなく、それの背後にある説明と比較解を感謝します。 またあなたも@Barmar – limco

関連する問題