我只是問自己,如果一個插件應用不止一次元素會發生什麼jQuery插件應用不止一次
想我做$("#my_element").plugin();
然後不知何故,我做同樣的事情$("#my_element").plugin();
- 最好避免這種情況?
- jQuery是否知道插件不能再次被應用?
對不起,如果這個問題不屬於這裏。告訴我,我會刪除它。
我只是問自己,如果一個插件應用不止一次元素會發生什麼jQuery插件應用不止一次
想我做$("#my_element").plugin();
然後不知何故,我做同樣的事情$("#my_element").plugin();
對不起,如果這個問題不屬於這裏。告訴我,我會刪除它。
這完全取決於插件作者。 jQuery沒有「真實」的方式來說「嘿,別這麼做!」然而,一個好的插件編寫器通常會有一個「初始化」方法,它可以將一個類或數據變量分配給該插件被調用的原始元素。喜歡的東西:
/* Example Plug-in Setup */
(function($) {
if (!$.myExample) {
$.extend({
myExample: function(elm, command, args) {
return elm.each(function(index){
// here a check is made to see if this plugin has touched this element before
if (!$(this).hasClass('my-example')) {
$.myExample.init.apply($(this), arguments);
}
else {
// do work to each element as its passed through
}
});
}
});
$.fn.extend({
myExample: function(command) {
return $.myExample($(this), command, Array.prototype.slice.call(arguments, 1));
}
});
$.myExample.init = function() {
// here we initialize the plugin on this element for the first time
// Assign element the class stating "hey, you've been here!"
this.addClass('my-example');
};
}
})(jQuery);
請記住,這僅僅是一個例子,有很多不同的方法來設計基於不同需求的插件,但是這應該給你如何插件「檢查的基本思路本身「在它之前」破壞自己「!
"Do you know what could happen if that check isn't present?"
嗯,這是一個 「loaded question」。這真的取決於插件編寫的「什麼」。許多不同的事情可能發生。例如,如果您編寫了一個插件來克隆表單並隱藏DOM上的副本,那麼每次您在該表單上調用該插件時,都會將新副本保存到DOM!如果目的是隱藏數據庫上傳的具體信息,這可能是可怕的。
然後,它可能只是一個重寫元素的「內部」HTML的插件,因此只需再次調用時就可以重寫,並且可能看起來根本沒有任何效果。
簡而言之,無論發生什麼都取決於插件編寫器,但不要將插件視爲「異物」。它們只是JavaScript,在這種情況下,使用jQuery,用文件和/或插件方法封裝。這不會幫助他們取代您在JavaScript代碼中已經看到的任何內容。它只是意味着「擴展」一個圖書館。因此給你「預先寫好的」代碼,否則你需要編寫自己的代碼。
jQuery不會在該級別強制執行任何規則。插件開發人員負責檢查該插件是否已經增加了一個元素,並在這種情況下執行了禁止操作。 –
@FrédéricHamidi你知道如果檢查不存在會發生什麼? –
取決於插件。例如,事件處理程序最終可能會被多次註冊。 –