2011-08-05 15 views
4

データを入力したいセルを見つけるJquery行があります。これは$ .post関数の外で使用すると動作します。 )ではなく、

$(this).parent().parent().find(".total_item_price").html("new text"); 

しかし、私は以下の例では、上記の行を使用する場合、それは動作しません、私の$ .post内部。必須フィールドのテキストは更新されません。

$.post(url, { "params": value}, function(data) { 

      // This is where I am having a problem 
      // also tried .text and .val 
      $(this).parent().parent().find(".total_item_price").html(data.total_price_item); 

      alert(data.total_price_item); // This outputs my data 
     }, "JSON"); 

私は基本的に返された(データ)をテーブルのセルに入れたいと思っています。私はテーブルの構造が問題ではないと思っていますが、必要に応じて投稿することができます。

それぞれのポスト関数が異なるセルに出力されるので、私は親とフィールドを見つけなければならないということを付け加えてください。

このコードではどうなりますか?

答えて

8

ロードコールバック内のthisがロードコールバックの外側にあるthisと等しくないためです。彼らは異なるスコープを持っています。

あなたがポストを呼び出す前に、変数に他のスコープからthisをキャッシュ:

var scope = this; 

そして、あなたのコールバックで、あなたが他のthisscopeとして参照することができます。

$(scope).parent().parent().find(".total_item_price").html(data.total_price_item); 
+1

よろしくお願いいたします。私は完全に理解する! 8で受け入れる – Anil

4

Inを$.postthisは、あなたが考えているのと同じ要素を指しません。実際のセレクタを使って動作させてください。

4

あなたの関数内の "this"は、関数ではなくノードへの参照であるためです。

4

($this)あなたはそれがあなたの考えではありません! this、常に、実行中の機能の所有者であり、$.postコールバックです。あなたはこのようにそれを行うことができます

2

var a= $(this); 
    $.post(url, { "params": value}, function(data) { 

      // This is where I am having a problem 
      // also tried .text and .val 
      a.parent().parent().find(".total_item_price").html(data.total_price_item); 

      alert(data.total_price_item); // This outputs my data 
     }, "JSON"); 
+0

これはチャンクに分割すると読みやすくなります。ありがとう – Anil

2

$(this)が動作しません。コールバック関数の範囲にあり、clickイベントではありません。

投稿の外の変数(clickイベントハンドラ内)に$(this)を割り当てて、ポストコールバックの内部でそれを使用します。

var that = $(this); 
    $.post(url, { "params": value}, function(data) { 
     that.parent().parent().find(".total_item_price").html(data.total_price_item); 
     alert(data.total_price_item); // This outputs my data 
    }, "JSON"); 
関連する問題