我想要某種方式來爲元素添加和刪除唯一的命名事件,這樣我就可以確保事件永遠不會被添加多次。當你添加事件到一個元素時,即使它們中的兩個意圖是相同的事件,它們也會相互疊加。對於一個簡單的 - 丁abstracted-例如:添加和刪除獨特的jQuery事件(onUnique/offUnique?)
$('a').on("click", function(e){ console.log("Hi One"); }); // 1
$('a').on("click", function(e){ console.log("Hi One"); }); // duplicate
$('a').on("click", function(e){ console.log("Hi Two"); }); // 2
// Output will be: Hi One, Hi One, Hi Two
我嘗試使用像.off(的方法)上(),但只允許一次一個事件。
$('a').off("click").on("click", function(e){ console.log("Hi One"); });
$('a').off("click").on("click", function(e){ console.log("Hi One"); });
$('a').off("click").on("click", function(e){ console.log("Hi Two"); });
// Output will be: Hi Two
所以我想出了這個擴展的jQuery:
$.fn.onUnique = function (
/* uniqueEventName, events [,selector] [,data], handler(eventObject) */
) {
var uniqueEventNameArray = this.data("uniqueEvents") || [];
var uniqueEventName = arguments[0];
if ($.inArray(uniqueEventName, uniqueEventNameArray) == -1) {
uniqueEventNameArray.push(uniqueEventName);
this.data("uniqueEvents", uniqueEventNameArray);
this.on(arguments[1], arguments[2], arguments[3], arguments[4]);
}
};
所以我能得到我想要的效果...
$('a').onUnique("Hi1", "click", function(e){ console.log("Hi One"); });
$('a').onUnique("Hi1", "click", function(e){ console.log("Hi One"); });
$('a').onUnique("Hi2", "click", function(e){ console.log("Hi Two"); });
// Output will be: Hi One, Hi Two
我的問題有兩個:
- 有沒有更好的方法來做到這一點?
- 我該如何做.offUnique()的等價物,它只會刪除指定的事件(按名稱)?
謝謝,我想這正是我一直在尋找。 – Luke