我想有一個事件處理程序只執行一次,然後從綁定到的所有元素解除綁定。jquery事件處理程序只執行一次綁定到多個元素
我知道.one()
,但是在使用它時「處理程序每個元素最多執行一次」。
是否有一種「內置」方式將事件處理程序綁定到多個元素,並在它們中的任何一個上執行後自動從所有元素中移除它?
我想有一個事件處理程序只執行一次,然後從綁定到的所有元素解除綁定。jquery事件處理程序只執行一次綁定到多個元素
我知道.one()
,但是在使用它時「處理程序每個元素最多執行一次」。
是否有一種「內置」方式將事件處理程序綁定到多個元素,並在它們中的任何一個上執行後自動從所有元素中移除它?
miguel camba已經告訴你檢查維基解除綁定。正確的解決方案如下:
var handler = function() {
alert('I appear only one time');
$('p').unbind('click', handler);
}
$('p').bind('click', handler);
這將只從click事件中解除綁定此處理程序。
//編輯:
另一種解決辦法是命名空間點擊事件:
$('p').bind('click.myClickEvent', function() {
alert('I appear only one time');
$('p').unbind('click.myClickEvent');
});
工作這樣勢必導致在某些時候有些麻煩。 如果我將不得不手動執行此操作,我會編寫一個.once(處理程序),它將同時保留指向「this」和處理程序的指針,並綁定另一個處理程序,該處理程序將僅刪除它添加的處理程序。這只是我希望JQuery已經有這樣的東西... – epeleg
在這種情況下,我不知道任何現有的jquery函數,就像那樣。 這種方法對我來說似乎不是很容易出錯,但實現一個附加第二個事件的jquery _fn.once()_函數可能會很複雜。您必須關注事件優先級,使用_stopPropagation_的事件可能不會被解除綁定....似乎更復雜的是隻需在您的回調函數中添加一行。 –
接受爲「我不知道任何現有的jquery函數,就像那樣工作」... – epeleg