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

Вы запускаете свой плагин с помощью селектора классов. Обычно мы используем атрибут data, чтобы инициировать плагин из самого плагина. Я предлагаю вам подробнее изучить создание плагинов в jquery. Нельзя инициировать плагин с селектором классов в самом файле плагина. – Yalamber

+0

Хорошо, поэтому я увижу больше примеров при разработке плагина. Можете ли вы предложить другие ресурсы, кроме https://learn.jquery.com/plugins/advanced-plugin-concepts/, чтобы основательно изучить основы - с хорошим объяснением? а также - что можно сделать в этом случае? – Smit

Смежные вопросы