in YUI3 ist es möglich, einen einzelnen Handler mehrere Ereignisse zu befestigen?
-
01-10-2019 - |
Frage
so etwas wie das möglich?
Y.one("input.units").on("keyup change", function(e){
...
});
das jquery entspricht
$("input.units").bind("keyup change", function(e){
...
});
Lösung
Ja, das ist möglich. Übergeben Sie einfach eine Reihe von Ereignisnamen anstelle einer Zeichenfolge:
Y.one('input.units').on(['keyup', 'change'], function (e) {
// ...
});
Andere Tipps
Warum nicht so etwas wie dies versucht:
var actionFunction = function(e) { /* stuff goes here */ };
node.one("input.units").on("keyup", actionFunction);
node.one("input.units").on("change", actionFunction);
EDIT: YUI nativ unterstützt dies. Siehe Ryans Antwort unten.
No . Man könnte so etwas tun, aber:
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);
})
Dieser Code hüllt Node.on () eine Reihe von Leerzeichen getrennte Ereignistypen zu akzeptieren. Es gibt ein Objekt mit einer einzigen Methode, detach, die von allen Ereignissen Handler ablöst.
Beachten Sie, dass dieser Code nur die Y-Instanz wirkt innerhalb seiner Sandbox , so dass Sie es in der Funktion setzen sollte, dass Sie YUI().use
passieren. Es wäre auch leicht sein, es als Modul zu verpacken.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow