对象不支持 属性 或方法 'closest'
Object doesn't support property or method 'closest'
我刚刚得知我的 jQuery 功能在 IE 或 Edge 上不起作用。在控制台中,我收到消息:
对象不支持 属性 或方法 'closest'
这是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 < 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: event.target.id,
value: event.target.value,
iscouche: "False"
},
}).done(function (msg) {});
}
});
有人可以告诉我是否有解决办法吗?
closest()
是在 jQuery 原型上定义的,它不能用于普通的 JavaScript 对象。
event.target
是事件发生的DOM元素,要在其上使用jQuery方法,需要将元素包裹在jQuery中。
改变
var what = event.target.closest('tbody')
到
var what = $(event.target).closest('tbody')
您必须将其包含在 $()
中,因为 event.target
不是 jQuery 元素
$(event.target).closest('tr')
event.target
是一个 DOM 节点,而不是一个 jQuery 对象,因此没有 jQuery 方法
在 jQuery 中使用 $(this)
,这是一个 jQuery 对象。
我也建议您如果不需要,请不要使用该目标。
更新: 较新的浏览器现在具有 DOM 方法 closest,因此 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
val = this.value,
id = this.id,
isCouche = id.indexOf("couche") != -1;
$.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
}
});
});
我刚刚得知我的 jQuery 功能在 IE 或 Edge 上不起作用。在控制台中,我收到消息:
对象不支持 属性 或方法 'closest'
这是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 < 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: event.target.id,
value: event.target.value,
iscouche: "False"
},
}).done(function (msg) {});
}
});
有人可以告诉我是否有解决办法吗?
closest()
是在 jQuery 原型上定义的,它不能用于普通的 JavaScript 对象。
event.target
是事件发生的DOM元素,要在其上使用jQuery方法,需要将元素包裹在jQuery中。
改变
var what = event.target.closest('tbody')
到
var what = $(event.target).closest('tbody')
您必须将其包含在 $()
中,因为 event.target
不是 jQuery 元素
$(event.target).closest('tr')
event.target
是一个 DOM 节点,而不是一个 jQuery 对象,因此没有 jQuery 方法
在 jQuery 中使用 $(this)
,这是一个 jQuery 对象。
我也建议您如果不需要,请不要使用该目标。
更新: 较新的浏览器现在具有 DOM 方法 closest,因此 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
val = this.value,
id = this.id,
isCouche = id.indexOf("couche") != -1;
$.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
}
});
});