所以是這樣的可能嗎?是否可以將單個處理程序附加到多個事件?
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){
...
});
了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