Ich habe gerade die Information erhalten, dass meine jQuery-Funktion weder an IE noch an Edge funktioniert. In der Konsole habe ich die Nachricht:
Objekt unterstützt keine Eigenschaft oder Methode 'close'
Dies ist die 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) {});
}
});
Kann mir jemand sagen, ob es ein Update gibt?
event.target
ist ein DOM-Knoten, kein jQuery-Objekt, daher gibt es keine jQuery-Methoden
Verwenden Sie in jQuery stattdessen $(this)
, ein jQuery-Objekt.
Ich schlage auch vor, dass Sie das Ziel nicht verwenden, wenn Sie es nicht brauchen.
UPDATE: Der neuere Browser hat jetzt die DOM-Methode close , so dass der OPs-Code in neueren Browsern mit Ausnahme von IE funktionieren würde.
Hier ist eine feste jQuery-Version:
$('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) {});
}
});
oder ordentlich:
$('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()
ist im jQuery-Prototyp definiert und kann nicht für einfaches JavaScript-Objekt verwendet werden.
event.target
ist das DOM-Element, auf dem das Ereignis aufgetreten ist. Um die jQuery-Methoden verwenden zu können, muss das Element in die jQuery eingeschlossen werden.
Veränderung
var what = event.target.closest('tbody')
zu
var what = $(event.target).closest('tbody')
Sie müssen es in $()
einschließen, da event.target
kein jQuery-Element ist
$(event.target).closest('tr')