2011-01-24 4 views
1

JQueryを使用してAJAXポストを実行するときにDOMを更新する際に問題があります。これは、jQueryのコードです:JQueryでDOM要素を指定するAJAXポスト

 $('.answerForm').live('submit', function(event) { 
      event.preventDefault(); 
      $.post($(this).attr('action'), $(this).serialize(), 
       function(data){ 
        if (data.success) { 
         $(this).hide(); 
        } 
        else { 
         alert("not success"); 
        } 
       }, "json"); 
     }); 

私は質問&答えのウェブサイトに取り組んでいます。ユーザーが 'reply'を押すと、答えフォーム(class = 'answerForm'、idなし)がDOM内に挿入されます。成功した場合、私がしたいことは、そのanswerFormを隠し、次のものを答えに置き換えることです。しかし、私はfunction(data)内で$(this)を使うことはできないようです。

idsを使用してすべてにタグを付けるだけでなく、適切なDOMオブジェクトを選択する機会があるかどうかは疑問でした。

おかげ

答えて

2

キャプチャ変数に関連し、そして成功コールバックの中にいることを使用します。

$('.answerForm').live('submit', function(event) { 
    event.preventDefault(); 
    var that = this; 
    $.post($(this).attr('action'), $(this).serialize(), function() { 
     ... 
     $(that).hide(); 

また、場合には、それはあなたが$.ajaxを使用している場合になりcontext optionがあり、興味のありますそう、すべてのコールバックのコンテキストオブジェクト:

$.ajax({ 
    url: $(this).attr('action'), 
    context: this, 
    success: function() { 
     $(this).hide(); 
    } 
}); 
0

のような名前の成功ハンドラを作成します。
function mySuccessHandler(data) { 
    $(this).hide(); 
} 

その後、あなたのポストの呼び出しにあなたが行うことができます

$.post($(this).attr('action'), $(this).serialize(), $.proxy(mySuccessHandler, this)) 
関連する問題