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(){})代码>