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

时间:2011-09-07 13:14:46

标签: 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();
});

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

这里有什么帮助吗?提前谢谢。

4 个答案:

答案 0 :(得分:41)

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

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

答案 1 :(得分:7)

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

所以你可以在之前将$(this)分配给变量并在

之后调用它

答案 2 :(得分:1)

// assign this to a variable

var val = this;

// Use

$(val).closest('tr').remove(); // It worked for me

而不是:

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

答案 3 :(得分:-1)

我在 $。get()请求上得到完全相同的错误。

对我来说,这是jQuery中最奇怪的错误(我的版本1.8.3)。

我出错的原因是 TD元素,ID设置为“nodeName”

将ID值更改为其他内容后,错误消失。

原件:

<td id="nodeName"></td>

新:

<td id="nodeNameValue"></td>