Je viens de recevoir l'info que ma fonction jQuery ne fonctionne pas sur IE ni Edge. Dans la console, j'ai le message:
L'objet ne prend pas en charge la propriété ou la méthode 'la plus proche'
C'est le 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) {});
}
});
Quelqu'un peut-il me dire s'il y a un correctif pour cela?
event.target
est un nœud DOM, pas un objet jQuery, donc n'a aucune méthode jQuery
Dans jQuery, utilisez plutôt $(this)
qui est un objet jQuery.
Je suggère également que vous n'utilisez pas la cible si vous n'en avez pas besoin.
UPDATE: les navigateurs les plus récents ont maintenant la méthode DOM le plus proche , de sorte que le code OPs fonctionne dans les navigateurs les plus récents, sauf IE.
Voici une version corrigée de 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) {});
}
});
ou plus propre:
$('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()
est défini sur le prototype jQuery, il ne peut pas être utilisé sur un objet JavaScript simple.
event.target
est l'élément DOM sur lequel l'événement s'est produit. Pour utiliser les méthodes jQuery, l'élément doit être encapsulé dans jQuery.
Changement
var what = event.target.closest('tbody')
à
var what = $(event.target).closest('tbody')
Yuo doit l'inclure dans $()
car event.target
n'est pas un élément jQuery
$(event.target).closest('tr')