2011-07-31 21 views
2

私はjQueryでajaxツールを使って遊んでいましたが、私のajaxの実行の成功の中で$(これ)を使うことに問題があります。私はあなたの成功の中であなたの成功の中でチュートリアルで使われているようなものを使うことが可能かどうか疑問に思っていましたが、私はそれを使ってみようとしましたが、$(文書)やその他の方法私はそれがうまく動作したいオブジェクト...私はかなりjQueryに新しいですので、どんな助けても大いに感謝されます!前もって感謝します!次のように一緒に遊んコードイムは、次のとおりです。

$(".markRead").click(function() { 
    var cId = $(this).parents("div").parents("div").find("#cId").val(); 
    var field = "IsRead"; 

    $.ajax({ 
     type: "POST", 
     url: "ajax/contract_buttons.php", 
     dataType: "text", 
     data: "contractId=" + cId + "&updateField=" + field, 
     async: false, 
     success: function(response) { 
      //$(this) doesnt recognize the calling object when in the success function... 
      $(this).find("img").attr("src", "images/read.png"); 
     }, 
     error: function(xhr, ajaxOptions, thrownError) { 
      alert(xhr.statusText); 
      alert(thrownError); 
     } 
    }); 
}); 
+0

これはまだ$(.markRead).Clickを表していますか?この場合には? –

答えて

3

thisそれは必ずしもAJAX成功ハンドラなどのコールバック関数の中で同じ滞留しないように、常に現在の実行コンテキストを指します。それを参照したい場合は、実際のthisの値が他の値に設定されている場合でも、Dennisが指摘したとおりにその値を自分のローカル変数に保存して、後で参照できるようにする必要があります。これは間違いなくjavascriptのニュアンスの1つです。コードを次のように変更してください:

$(".markRead").click(function() { 
    var cId = $(this).parents("div").parents("div").find("#cId").val(); 
    var field = "IsRead"; 
    var element = this; // save for later use in callback 

    $.ajax({ 
     type: "POST", 
     url: "ajax/contract_buttons.php", 
     dataType: "text", 
     data: "contractId=" + cId + "&updateField=" + field, 
     async: false, 
     success: function(response) { 
      //$(this) doesnt recognize the calling object when in the success function... 
      $(element).find("img").attr("src", "images/read.png"); 
     }, 
     error: function(xhr, ajaxOptions, thrownError) { 
      alert(xhr.statusText); 
      alert(thrownError); 
     } 
    }); 
}); 
+0

働いてくれてありがとう、なぜ(これは)$がうまくいかない理由がありますか?ちょうど私が何を考えているのだろうかと思っています。 –

+0

'$(this)'は 'this'を渡す' $() '関数で、' this'は内部で別の値を持つことができますコールバック関数の実行コンテキストとしてのあなたのコールバック関数は、実際には、あなたのクリック関数ではなく、ajax呼び出しの内部です。 – jfriend00

+1

success関数の文脈における 'this'は、XMLHttpRequestオブジェクトのjQueryラッパーを指します。そのスコープは.markRead要素で実行される関数とは異なります。 – Dennis

関連する問題