2012-03-09 100 views
1
$('#list li a').on('click', function(e) { 
    var user_id = this.parentNode.id.replace('list_', ''); 
    var id = 'id=' + user_id; 
    e.preventDefault(); 

    $.ajax({ 
     type: "POST", 
     url: "xxx.php", 
     data: id, 
     success: function() { 
      $(this).parent().hide(); //the problem is here 
      $('.updateNumber').html(function() { 
       return parseInt($(this).text(), 10) + 1; 
      }); 
     } 
    }); 
}); 

我认为AJAX后调用它,因为(这一点)选择的,它不是正确引用它不能reconize李名单,感谢您的帮助为什么这个jQuery代码不会删除李列表项?

回答

0

你是正确的,因为Ajax回调中this不被点击的锚。下面应该工作:

$('#list li a').on('click', function(e) { 

     var user_id = this.parentNode.id.replace('list_', ''); 
     var id = 'id=' + user_id; 
     e.preventDefault(); 

     var $a = $(this); 

     $.ajax({ 
     type: "POST", 
     url: "xxx.php", 
     data: id, 
     success: function(){ 
      $a.parent().hide(); 
      $('.updateNumber').html(function(){ 
       return parseInt($(this).text(),10)+1; 
      }); 
     }); 
    }); 

保存到$.ajax()外呼被点击链接的参考。回调函数可以访问其包含范围中的变量。

0

您正确识别了问题。每个函数都有自己的this变量,并且不能引用父函数的this而不添加其他变量或做其他某种奇特的变形。

无论如何,你的问题很容易解决。首先,添加一个变量设置为正确的this

$('#list li a').on('click', function(e) { 
    var $this = $(this); 
    //... 

,然后引用变量,而不是:

$this.parent().hide();