是否可以将单个处理程序附加到多个事件?
所以是这样的可能吗?是否可以将单个处理程序附加到多个事件?
Y.one("input.units").on("keyup change", function(e){
...
});
了jQuery相当于是
$("input.units").bind("keyup change", function(e){
...
});
是的,这是可能的。只是通过事件名称的数组,而不是字符串:
Y.one('input.units').on(['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);
(坐在旁边的@delimited谁也不能在他对问题的评论)一个更优雅的解决方案,他只是做正是......只是希望 – 2010-09-08 15:02:34
啊......呃。我以为他只是试图找出一种方法来让这两个事件的功能发射。 – Pat 2010-09-08 15:17:50
一个更优雅的解决方案是将整个东西包装在一个'(function(){...})()'中,并将私有'var actionFunction'作为一个闭包,从而使其基本上是匿名的。这是OP的正确之后?防止全球命名空间污染?等等,来想一想这是YUI3。代码已经包装在一个函数中。 – slebetman 2010-09-08 15:55:08
编辑: YUI本身支持这一点。请参阅下面的Ryan的答案。
No。你可以做这样的事情,虽然:
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
函数内。将它打包成模块也很容易。
很好的答案,谢谢。 – delimited 2010-09-22 10:19:34
其实,这是可能的。您只需传递一组事件类型即可。尽管如此,这个解决方案很好地展示了如何将YUI的内部结构屈服于自己的意愿。 – 2010-10-09 00:09:49
非常好,我现在已经改变这是被接受的答案。感谢所有贡献的人。 – delimited 2010-10-11 11:23:50
jQuery的那里:'node.on('bind change'.split(''),function(){});' – 2011-11-18 20:13:15
这是否也适用于委托? – chrisjlee 2015-01-14 21:38:29