в YUI3 можно ли привязать один обработчик к нескольким событиям? - PullRequest
5 голосов
/ 08 сентября 2010

так что-нибудь подобное возможно?

Y.one("input.units").on("keyup change", function(e){
    ...
});

JQuery эквивалент

$("input.units").bind("keyup change", function(e){
    ...
});

Ответы [ 3 ]

10 голосов
/ 09 октября 2010

Да, это возможно.Просто передайте массив имен событий вместо строки:

Y.one('input.units').on(['keyup', 'change'], function (e) {
    // ...
});
1 голос
/ 08 сентября 2010

РЕДАКТИРОВАТЬ: YUI поддерживает это изначально.См. Ответ Райана ниже.

Нет .Вы можете сделать что-то вроде этого, хотя:

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);
})

Этот код оборачивает Node.on () для принятия строки типов событий с разделителями-пробелами.Он возвращает объект с единственным методом detach, который отсоединяет ваш обработчик от всех событий.

Обратите внимание, что этот код влияет только на экземпляр Y внутри его песочницы , поэтому вы должны поместить его в функцию, которую вы передаете YUI().use.Также было бы легко упаковать его как модуль.

1 голос
/ 08 сентября 2010

Почему бы не попробовать что-то вроде этого:

var actionFunction = function(e) { /* stuff goes here */ };

node.one("input.units").on("keyup", actionFunction);
node.one("input.units").on("change", actionFunction);
...