2014-09-28 72 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