5

那么这样的事情可能吗?

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

jquery 等价物是

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

3 回答 3

10

是的,这是可能的。只需传递事件名称数组而不是字符串:

Y.one('input.units').on(['keyup', 'change'], function (e) {
    // ...
});
于 2010-10-09T00:08:47.817 回答
1

为什么不尝试这样的事情:

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

node.one("input.units").on("keyup", actionFunction);
node.one("input.units").on("change", actionFunction);
于 2010-09-08T14:59:44.603 回答
1

编辑: 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。将其打包为模块也很容易。

于 2010-09-08T18:42:43.123 回答