2017-11-14 4 views
-3

私は画像グループのメソッドにバインドされたコールを持っています。post()呼び出しのdone()ブロック内のトリガーオブジェクトを参照していますか?

post()の中では、私はjQuery(this)を参照し、元のオブジェクトにアクセスできます。 (例えばデータパラメータ、またはその状態を変更):

jQuery('.vote .magic_button').click(function() { 
    jQuery.post(url, { 
     action: 'ajax_vote', 
     'vote_target': jQuery(this).data('postid') 
    }) 
    .done(function(data) { 
     // $img = jQuery(this).find('img');   
    }) 
}); 

AJAX呼び出しが戻ると、応答を確認した後、私はもともとクリックされた画像を参照したいんが、それはもはや、この新しいでthisときコンテキスト。

data引数に情報を戻さずにアクセスするにはどうすればよいですか?

答えて

1

回避方法var that = thisを使用するか、ES5 .bind関数を使用してthisを正しく設定することができます。

jQuery('.vote .magic_button').click(function() { 
    jQuery.post(url, { 
     action: 'ajax_vote', 
     'vote_target': jQuery(this).data('postid') 
    }) 
    .done(function(data) { 
     // $img = jQuery(this).find('img');   
    }.bind(this)) 
}); 

Documentation

+0

これはもう少しエレガントな "自己" の割り当てトリックよりも思えます。しかし、バインドには追加要件がありますか?それは正規のJSで動作するのですか、それともプリプロセッサが必要ですか? – yivi

+0

いいえ、単に比較的最新のブラウザです。リンクされたドキュメントの互換性表を参照してください。 – gotomanners

+1

Mmmmh .... FF Devで非常に素敵な 'jQuery.post(...)。done(...)を取得します。bindは関数ではありません。 '... – yivi

関連する問題