为什么这个jquery代码不删除li列表项

Why does this jquery code not remove the li list item?

本文关键字:删除 li 列表 代码 jquery 为什么      更新时间:2023-09-26
$('#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 调用后,由于 (THIS( 选择器,它无法识别 li 列表,它没有正确引用它,感谢您的帮助

您是正确的,在 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()呼叫之外保存对单击的链接的引用。回调函数可以访问其包含范围内的变量。

您正确识别了问题。每个函数都有自己的this变量,如果不添加另一个变量或做一些其他类型的花哨的修饰,你就不能引用父函数的this

无论如何,您的问题很容易解决。首先,将变量集添加到正确的this

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

,然后改为引用该变量:

 $this.parent().hide();