Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在YUI3中,是否可以将单个处理程序附加到多个事件?_Javascript_Jquery_Yui3 - Fatal编程技术网

Javascript 在YUI3中,是否可以将单个处理程序附加到多个事件?

Javascript 在YUI3中,是否可以将单个处理程序附加到多个事件?,javascript,jquery,yui3,Javascript,Jquery,Yui3,这样的事情可能吗 Y.one("input.units").on("keyup change", function(e){ ... }); jquery等价物是 $("input.units").bind("keyup change", function(e){ ... }); 为什么不试试这样的东西: var actionFunction = function(e) { /* stuff goes here */ }; node.one("input.units").on

这样的事情可能吗

Y.one("input.units").on("keyup change", function(e){
    ...
});
jquery等价物是

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

为什么不试试这样的东西:

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

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

编辑:YUI本机支持此功能。见下面Ryan的答案

。不过,您可以这样做:

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()的函数中。请使用
。将其打包为一个模块也很容易。

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

Y.one('input.units').on(['keyup', 'change'], function (e) {
    // ...
});

(坐在@delimited旁边,他无法对自己的问题发表评论)他刚刚做到了这一点。。。只是希望有一个更优雅的解决方案。。。明白了。我以为他只是想找出一种方法让函数为这两个事件启动。一个更优雅的解决方案是将整个过程包装在一个
(function(){…})(
中,并将私有
var actionFunction
捕获为一个闭包,从而使其本质上匿名。这就是行动的目的,对吧?防止全球环境污染?等等,想想看,这是YUI3。代码已经包装在函数中。实际上,这是可能的。您只需传递一个事件类型数组。这个解决方案是一个很好的例子,说明了如何让YUI的内部结构符合您的意愿。很好,我现在已经将其更改为可接受的答案。感谢所有贡献的人。对于jQueryers:
node.on('bindchange'.split(''),function(){})