2015-01-04 2 views
2

Я пытаюсь написать автоматический полный плагин jQuery.Добавить метод привязки в плагин jQuery

Желаемое использование:

$('.advancedSelect').advancedSelect({/*plugin options*/}).change(function(){})/*.otherJQueryMethods*/; 

Реализация:

$.fn.advancedSelect = function({ 
    return this.each(function(){ 
     var $advSel = $('<input/>'); 
     var $el = $(this).after($advSel).hide(); 
     /* my codes on desired functionalities */ 
     /* how is it possible to trigger the chained change method */ 

    }); 
}); 

ответ

2

В комментарии на мой скоро, чтобы быть делецией ответ (как это ответил на вопрос другой, чем ваш реальный вопрос, как выясняется), вы сказали:

мне было интересно, может ли у нас есть синтаксис вроде этого:

$('.advancedSelect').advancedSelect({/*plugin options*/}).onChange(function(){}).css({}) 

-and by .css Я имел в виду любые другие методы jQuery.

Я хотел бы предложить либо это:

$('.advancedSelect').advancedSelect({/*other plugin options*/, onChange: function(){}}).css({}) 

или это:

$('.advancedSelect').advancedSelect({/*plugin options*/}).advancedSelect("onChange", function(){}).css({}) 

... с довольно сильным предпочтением первого. :-)

Re, что первый вариант, адъюнкт вы видите много есть дополнительная «опция» метод, который можно использовать в дальнейшем для изменения параметров ::

// Initial setup 
$('.advancedSelect').advancedSelect({/*other plugin options*/, onChange: function(){}}).css({}) 

// Later, I need to change something 
$('.advancedSelect').advancedSelect("options", { onChange: function(){}}); 

Side Примечание: Если change -подобный метод заключается в регистрации обработчика изменений, почему бы просто не использовать jQuery's change (или on с некоторым именем события, связанным с плагином), и у вас есть плагин для создания события? Вот как я мог бы обрабатывать любые связанные с событиями вещи в плагине. Посмотрите на использование bootstrap shown.bs.modal и такие, например.

+0

Использование 'on' с пользовательским событием' adv.change' и 'trigger ('adv.change')' может быть лучшей альтернативой делу. Код будет выглядеть так: '$ ('. AdvancedSelect'). AdvancedSelect ({}). On ('adv.change', function() {})' Я предполагаю, что вы пытаетесь сказать, это не способ достичь упомянутого синтаксиса, правильно? – hbtb

+0

@hbtb: Нет разумного способа, нет. Я имею в виду, что вы можете сделать это внутри своей функции плагина: 'this.onChange = function() {...};' (например, добавление функции к * только одному объекту jQuery *), но я бы не назвал это разумный. Я бы определенно пошел с вашим собственным именем события и использовал 'on'. –

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