dans YUI3 est-il possible d'attacher un seul gestionnaire à plusieurs événements?

StackOverflow https://stackoverflow.com/questions/3669005

  •  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){
    ...
});
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top