Question

Je suis en contact avec une application qui utilise à la fois jQuery et underscore.js. Je voudrais pouvoir utiliser certaines fonctions de iterator de underscore, comme any() et all() sur une collection d'objets jQuery. Y a-t-il un moyen de faire cela? Je voudrais faire quelque chose de semblable à ce qui suit:

checkboxes = $("input[type=checkbox]");
_.filter(checkboxes, function(box) {
    return box.is(":checked");
});

mais cela renvoie une erreur:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'is'

Je suppose donc encadré dans ce contexte est de ne pas agir comme un objet jQuery.

Était-ce utile?

La solution

Vous devez envelopper box dans jQuery:

checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
    return $(box).is(":checked");
});

En outre, au lieu de créer un nouvel objet pour chaque élément de la collection, vous pouvez simplement utiliser la box.checked native:

checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
    return box.checked;
});

Sur une note latérale: jQuery a sa propre méthode de filtre :

checkboxes = $("input[type=checkbox]").filter(function() {
    return $(this).is(":checked");
});

Par ailleurs, dans votre exemple - êtes-vous sûr que vous avez à filtre? Vous pouvez tout aussi bien utiliser que votre sélecteur:

checkboxes = $("input[type=checkbox]:checked")

Autres conseils

Ici box est un objet de type HTMLInputElement. Son pas un objet jQuery. Comme .is est une méthode d'objet jQuery, vous avez besoin de jQuery objet box.

Il peut être simplement fait par, $(box). Appliquer ensuite .is().

$(box).is(":checked");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top