2014-09-28 71 views
1
$(".itemInto").click(function(){ 
var a = $(this).siblings(".itemName").html(); 
    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: "process.php", 
     data: {a:a}, 
     success: function(data) { 
      alert (data); // 20  
      $(this).siblings(".itemCount").text(data); // doesn't work. Nothing happens. 

     } 
    }); 
}); 

.itemCount.itemInto的同胞。为什么我不能在里面放置data?控制台是免费的。

回答

4

因为上下文已经改变。

尝试将context: this添加到您的AJAX参数中。

1

可以缓存参考this如下:

$(".itemInto").click(function(){ 
    var a = $(this).siblings(".itemName").html(), 
    $this = $(this); 
    $.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "process.php", 
    data: {a:a}, 
    success: function(data) { 
     alert (data); // 20  
     $this.siblings(".itemCount").text(data); // use the cached variable instead. 
    } 
    }); 
}); 

或者,如果你必须使用this,你可以按如下方式使用本地bind()方法:

$(".itemInto").click(function() { 
var a = $(this).siblings(".itemName").html(); 
    $.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "process.php", 
    data: { 
     a: a 
    }, 
    success: function (data) { 
     alert(data); // 20  
     $(this).siblings(".itemCount").text(data); 

    }.bind(this) 
    }); 
}); 
+0

TJ,这是行不通的。我复制了你的代码。 – bonaca 2014-09-28 13:09:41

+0

@bonaca它究竟如何运作?不会有任何参考问题。选中此[小提琴](http://jsfiddle.net/xmr6soum/)。无论如何,请检查[更新](http://jsfiddle.net/xmr6soum/1/)。 – 2014-09-28 13:16:45

2

因为$(本)在回调不是$( “itemInto”),你可以这样做:

$(".itemInto").click(function(){ 
var a = $(this).siblings(".itemName").html(); 
var $_this = $(this); 
$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "process.php", 
    data: {a:a}, 
    success: function(data) { 
     alert (data); // 20  
     $_this.siblings(".itemCount").text(data); // doesn't work. Nothing happens. 

    } 
    }); 
}); 
+0

yuanzm,它不起作用。我复制了你的代码。 – bonaca 2014-09-28 13:09:18

+0

也许你可以console.log $ _this在你回调中,看看会发生什么 – yuanzm 2014-09-28 13:36:41