未捕获的TypeError:无法调用未定义的方法'toLowerCase'

cab*_*ret 24 javascript jquery undefined typeerror

在做一些简单的jQuery DOM操作时遇到了一个非常模糊的错误.

触发错误的行如下:

$(this).closest('tr').remove();

如标题所述,错误是:

未捕获的TypeError:无法调用未定义的方法'toLowerCase'

在文件中:jquery-1.6.2.js.

我已经尝试过使用jQuery 1.6.3和jQuery 1.5.1,但没有任何改变.我仍然一直在收到错误.

上面的行绑定到一个按钮,当单击该按钮时,提交一个AJAX POST请求,然后成功时,它将删除它自己的按钮<tr>.我已经尝试过另一种方式:

$(this).parent().parent().remove() 但令我惊讶的是,这没有做任何事.

我正在使用Chrome,以防万一,但我在FF中遇到了同样的错误.

编辑:

这是我的代码:

$(".remove").live('click', function(e)  {
    var str = $(this).attr('id').match(/\[(.*?)\]\[(.*?)\]/);
    var type = str[1];
    var id = str[2];

            // IF I PUT THE remove() HERE, IT WORKS.

    $.ajax({
        type: 'POST',
        url: '/admin/ajax_remove_event_detail',
        data: {type: type, id: id},
        success:function(res)   {
            if(res)
            {
                $(this).closest('tr').remove();
                // this gives me an error
            }
            else
            {
              // error handling 
            }
        }
    });

    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

如果我把remove()放在if的某个地方之外,那就行了.当它在ajax调用/ if中时为什么不能工作?对我没用?:(

这里有什么帮助?提前致谢.

Poi*_*nty 41

我不知道你期望this在你的"成功"处理程序中有什么价值,但我敢打赌,这不是你的想法.保存this在"$ .ajax()"调用之外:

var clicked = this;
$.ajax(
  // ...
  success: function(res) {
    if (res) {
      $(clicked).closest('tr').remove();
    }
    else {
      // ...
    }
  }
);
Run Code Online (Sandbox Code Playgroud)


Py.*_*Py. 7

在您的请求中,$(this)不是.remove元素.这是一个封闭问题.

因此,您可以在之前将$(this)分配给变量并在之后调用它