有一个Jquery选择器可以工作,但在$ .post中不起作用

时间:2011-08-05 14:09:37

标签: jquery post

我有这个Jquery行,它找到了我想要输入数据的单元格,当我在我的$ .post函数(下面)之外使用它时,这是有效的,但不在我的$ .post内部

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

但是当我在下面的例子中使用上面的行时,它不起作用。它不会更新必填字段中的文本。

$.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"); 

我基本上想把我的返回(数据)放到表格的单元格中。我不认为我的表结构是问题,但我可以在需要时发布它。

我应该补充一点,我必须找到父节点和字段,因为每个post函数都会输出到不同的单元格中,所以它相对于用户点击的位置。

此代码出了什么问题?

6 个答案:

答案 0 :(得分:8)

因为加载回调中的this不等于加载回调之外的this。它们有不同的范围。

在致电帖子之前,将this从其他范围缓存到变量中:

var scope = this;

然后在您的回调中,您可以将其他this引用为scope

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

答案 1 :(得分:4)

$.post this中,不会指向您正在考虑的相同元素。请使用实际的选择器使其正常工作。

答案 2 :(得分:4)

因为函数中的“this”是对函数的引用而不是对节点的引用!

答案 3 :(得分:4)

($this)不是你想象的那样! this 始终正在执行的函数的所有者,$.post中的回调函数。

答案 4 :(得分: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"); 

答案 5 :(得分:2)

$(this)无法在那里工作。因为它在回调函数的范围内,而不是单击事件。

$(this)分配给帖子之外的变量(在click事件处理程序内),然后在帖子回调中使用它。

  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");