2013-07-10 63 views
0

我只是問自己,如果一個插件應用不止一次元素會發生什麼jQuery插件應用不止一次

想我做$("#my_element").plugin();然後不知何故,我做同樣的事情$("#my_element").plugin();

  1. 最好避免這種情況?
  2. jQuery是否知道插件不能再次被應用?

對不起,如果這個問題不屬於這裏。告訴我,我會刪除它。

+3

jQuery不會在該級別強制執行任何規則。插件開發人員負責檢查該插件是否已經增加了一個元素,並在這種情況下執行了禁止操作。 –

+0

@FrédéricHamidi你知道如果檢查不存在會發生什麼? –

+0

取決於插件。例如,事件處理程序最終可能會被多次註冊。 –

回答

2

這完全取決於插件作者。 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代碼中已經看到的任何內容。它只是意味着「擴展」一個圖書館。因此給你「預先寫好的」代碼,否則你需要編寫自己的代碼。

+0

感謝您的回答!你知道如果檢查不存在會發生什麼? –

+0

@Matías查看最新的答案 – SpYk3HH

+0

非常感謝! –