对象不支持属性或方法’最接近’
我刚刚得到的信息是我的jQuery函数不能在IE和Edge上运行。 在控制台中我有消息:
对象不支持属性或方法’最接近’
这是jQuery:
$('body').on('change', 'select', function (event) { if(event.target.id.indexOf("couche") >= 0) { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: event.target.id, value: event.target.value, iscouche: "True" }, }).done(function (msg) { if(msg.nothing == 1) { var what = event.target.closest('tbody'); $(what).find("tr:gt(0)").remove(); } else { var add = event.target.closest('tr'); var toremove = msg.toremove.split(" "); for(var i = 0; i 0) { jQuery(toremove[i]).remove(); } } jQuery(add).after(msg.ret); } }); } else { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: event.target.id, value: event.target.value, iscouche: "False" }, }).done(function (msg) {}); } });
有人能告诉我是否有解决办法吗?
event.target
是一个DOM节点,而不是一个jQuery对象,所以没有jQuery方法
在jQuery中使用$(this)
这是一个jQuery对象。
如果你不需要,我也建议你不要使用目标。
更新:较新的浏览器现在最接近 DOM方法,因此OP代码可以在IE以外的新浏览器中使用。
这是一个固定的jQuery版本:
$('body').on('change', 'select', function(event) { var $sel = $(this), // the changed select id = this.id, // or $(this).attr("id"); val = $(this).val(); // or this.value if (id.indexOf("couche") >= 0) { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: id, value: val, iscouche: "True" }, }).done(function(msg) { if (msg.nothing == 1) { var what = $sel.closest('tbody') $(what).find("tr:gt(0)").remove(); } else { var add = $sel.closest('tr'); var toremove = msg.toremove.split(" ") for (var i = 0; i < toremove.length; i++) { if (toremove[i].length > 0) { jQuery(toremove[i]).remove(); } } jQuery(add).after(msg.ret); } }); } else { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: id, value: val;, iscouche: "False" }, }).done(function(msg) {}); } });
或更整洁:
$('body').on('change', 'select', function(event) { var $sel = $(this), // the select changed id = this.id, isCouche = id.indexOf("couche") != -1, val = $(this).val(); $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: id, value: val, iscouche: isCouche ? "True" : "False"; }, }).done(function(msg) { if (isCouche) { if (msg.nothing == 1) { var what = $sel.closest('tbody') $(what).find("tr:gt(0)").remove(); } else { var add = $sel.closest('tr'); var toremove = msg.toremove.split(" ") for (var i = 0; i < toremove.length; i++) { if (toremove[i].length > 0) { $(toremove[i]).remove(); } } $(add).after(msg.ret); } } else { // handle not couche } }); });
closest()
是在jQuery原型上定义的,它不能用在普通的JavaScript对象上。
event.target
是发生事件的DOM元素,要在其上使用jQuery方法,该元素需要包装在jQuery中。
更改
var what = event.target.closest('tbody')
至
var what = $(event.target).closest('tbody')
Yuo必须将它包含在$()
因为event.target
不是jQuery元素
$(event.target).closest('tr')