2016-09-22 109 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