用 jquery 綁定和解綁定事件監聽器都是很簡單的。但是當你為一個元素的一個事件綁定了多個監聽器時,怎麼精確地解綁其中一個監聽器?我們需要了解一下事件的命名空間。
看下面這段程式碼:
$(“#element”) .on(“click”, doSomething) .on(“click”, doSomethingElse);
像上面這樣綁定事件監聽器,當元素被點擊時,doSomething 和 doSomethingElse 這兩個監聽器都會被觸發。這是使用 jQuery 的一個便利之處,可以隨時為元素的同一個事件添加不同的監聽器。不像用 onclick 那樣,新的監聽器會覆蓋舊的。
如果你想解綁其中一個監聽器,像是 doSomething,怎麼做呢?
是這樣嗎?
$(“#element”).off(“click”);
注意!上面這行程式碼會把元素的 click 事件的所有監聽器全部解綁,而這並不是我們想要的結果。
幸運的是 jQuery 的 .off() 方法可以接受第二個參數,就像 .on() 一樣。只要把監聽器函數的名字當作第二個參數傳入 .off() 方法,就能夠解綁指定的監聽器。
$(“#element”).off(“click”, doSomething);
但是如果你不知道這個函數的名字,或者你用的是匿名函數:
$(“#element”) .on(“click”, function() { console.log(“doSomething”); });
怎麼能精確地解綁某一個 click事件監聽器呢?該了解 jQuery 的事件命名空間了!
先上程式碼:
$(“#element”) .on(“click.myNamespace”, function() { console.log(“doSomething”); });
這裡不只是把 click 事件當作參數傳入 .on() 方法,而是為 click 事件指定了一個命名空間,然後監聽了這個命名空間裡的 click 事件。此時,即使監聽器是匿名函數,但實際上它也是「有名」的了。現在你可以像下面這樣解綁某一個具體的命名空間裡的事件監聽器了。
$(“#element”).off(“click.myNamespace”);
這是 jQuery 為我們提供的另一個方便且強大的功能,它的內部實作肯定很有意思!
以上是詳解jQuery 事件的命名空間的詳細內容。更多資訊請關注PHP中文網其他相關文章!