dans YUI3 est-il possible d'attacher un seul gestionnaire à plusieurs événements?
-
01-10-2019 - |
Question
est donc quelque chose comme ceci possible?
Y.one("input.units").on("keyup change", function(e){
...
});
l'équivalent jquery est
$("input.units").bind("keyup change", function(e){
...
});
La solution
Oui, cela est possible. Il suffit de passer un tableau de noms d'événement au lieu d'une chaîne:
Y.one('input.units').on(['keyup', 'change'], function (e) {
// ...
});
Autres conseils
Pourquoi ne pas essayer quelque chose comme ceci:
var actionFunction = function(e) { /* stuff goes here */ };
node.one("input.units").on("keyup", actionFunction);
node.one("input.units").on("change", actionFunction);
EDIT: YUI supporte nativement. Voir la réponse de Ryan ci-dessous.
Non . Vous pouvez faire quelque chose comme ça, si:
YUI().use("node", "oop", function (Y) {
var on = Y.Node.prototype.on;
function detachOne(handle) {
handle.detach();
}
Y.mix(Y.Node.prototype, {
on: function (type, fn, context) {
var args = Y.Array(arguments),
types = args[0].split(" "),
handles = [];
Y.each(types, function (type) {
args[0] = type;
handles.push(on.apply(this, args));
})
return {
detach: Y.bind(Y.each, null, handles, detachOne)
};
}
}, true);
})
enveloppe le code Node.on () pour accepter une série de types d'événements séparés par des espaces. Elle retourne un objet avec une seule méthode, détachez, qui se détache de votre gestionnaire de tous les événements.
Notez que ce code affecte uniquement l'instance Y dans son bac à sable , vous devez le mettre dans la fonction que vous passez à YUI().use
. Il serait également facile à empaqueter comme un module.