Добавить метод в цепочку в плагине 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 */

    });
});

1 ответ

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

Мне было интересно, можем ли мы иметь такой синтаксис:

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

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

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

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

или это:

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

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

Что касается первого варианта, то дополнительное дополнение, которое вы видите, является необязательным методом "options", который вы можете использовать позже для изменения параметров:

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

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

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

Другие вопросы по тегам