我在做一些简单的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中时为什么不能工作?对我没用? :(
这里有什么帮助吗?提前谢谢。
答案 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>