2016-09-22 137 views
0

我爲手風琴創建了一個基本的插件。我的代碼位於我的accordion.js文件中,在包含jQuery庫之後,我已經包含它。在accordion.js文件中使用此代碼的手風琴沒有問題。我的jQuery插件問題

(function($) { 
$.fn.accordion = function(options) { 
    var settings = $.extend({ 
     speed:300, 
    }, options); 
    return this.each(function() { 
     var $elm = $(this), 
      s = settings.speed; 
     $elm.on('click',function(e) { 
      $('.accordion-toggle').on('click', function(e){ 
       $elm.each(function() { 
        if(!$(e.target).is(this)) { 
         $($elm.attr('data-target')).slideUp(s); 
         $(this).removeClass('active'); 
        } 
       }); 
      }); 
      $($elm.attr('data-target')).slideToggle(s); 
      $elm.toggleClass('active'); 
      e.stopPropagation(); 
     }); 
    }); 
}}(jQuery)); $(".accordion-toggle").accordion(); 

但是,當我從我的頁面啓動速度選項,它會發生兩次。

$(".accordion-toggle").accordion({ speed: 500, }); 

問題在哪裏?

回答

1

在您的accordion.js文件中,您有$(".accordion-toggle").accordion();您可以刪除它並嘗試。

+0

是的,我知道這會工作。但它的插件 - 我已經看到,通常插件是從文件本身啓動的。 – Smit

+1

您正在使用類選擇器啓動您的插件。通常我們使用數據屬性從插件本身啓動一個插件。我建議你看看更多的在jQuery中創建插件。使用插件文件本身的類選擇器啓動插件是不正常的。 – Yalamber

+0

好的,所以我會在開發插件時看到更多的例子。除了https://learn.jquery.com/plugins/advanced-plugin-concepts/以外,你能否建議其他資源來徹底學習基礎知識 - 有很好的解釋嗎?還有 - 在這種情況下可以做些什麼? – Smit