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