2010-10-20 30 views
1

我正在嘗試編寫一個jQuery插件。爲簡單起見,讓我們說,我的代碼是jQuery插件:某些代碼只能調用一次

$.fn.myplugin = function() { 
    return this.each(function() { 
    $('a.mypluginToken').live('click', function(){}) 
    } 
} 

按照上面的代碼爲myplugin被稱爲每一次$(「A」),一個綁定了,因爲「活」「click」事件來完成。我需要該綁定只能完成一次,而不是每個調用我的插件的元素。

解決方法之一是綁定click事件後,我在文檔上設置了一個數據,說'binding_done'。並且每次檢查一次這些數據。即使該解決方案將工作,我想知道是否有一個更好的jQuery設計模式,我失蹤了。

謝謝。

我使用jQuery 1.4.2

回答

0

你看着jQuery的內置.one()方法?我不確定它是否完全適合您的應用程序,但實際上它是一個事件處理程序,每個元素只會觸發一次。

+0

我看過一個,但在這種情況下,它不會工作。 – 2010-10-20 17:38:39

1

如果我正確理解您的代碼,當您撥打$('a').myplugin時,您希望所有$('a.mypluginToken')都具有點擊功能?因爲這沒有任何意義。

首先,當你做$('a.mypluginToken').live時,你說任何時候<a>加上類mypluginToken被添加,添加一個點擊事件。所以沒有必要繼續調用這個插件。如果你只想綁定一個點擊事件,只需要做.bind('click', function() {})。或者,當頁面加載並忘記時,您可以撥打$('a.mypluginToken').live一次。

其次,爲什麼你循環選擇器的每個元素,如果身體只是選擇你想要的所有東西呢?

如果你想要那件作品,你可以做$('a.mypluginToken').unbind().bind('click', function() {})。這將確保每次綁定時都不會有事件發生。但是,此代碼將刪除當前綁定的所有事件,即使是非點擊事件。

是否試圖只在當前選擇器內附加點擊甚至到類mypluginToken?然後,你要

function click_event() {}; 

$.fn.myplugin(function() { 
    $(this).filter('.mypluginToken').unbind('click', click_event).bind('click', click_event); 
} 

拉着你的點擊,甚至功能,通話和引用它確保取消綁定將只解綁功能,而不是所有點擊事件。