2015-01-04 86 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({}) 

...與第一種相當強烈的偏好。 :-)

再是第一個選項,你看到很多是一個可選的「選項」的方法,你可以使用以後更改選項::

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

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

旁註兼職:如果這個change類似的方法是註冊一個更改處理程序,爲什麼不只是使用jQuery的change(或on與一些特定於插件的事件名稱),並讓你的插件引發一個事件?這就是我在插件中處理任何事件相關的事情的方式。例如,查看引導程序的使用shown.bs.modal等等。

+0

對自定義的'adv.change'事件和'trigger('adv.change')'使用'on'可能是案例的最佳選擇。代碼將如下所示: 我想你在說什麼是在那裏(如果有的話)沒有辦法實現上述語法,對吧? – hbtb 2015-01-04 19:22:43

+0

@hbtb:沒有合理的方式,沒有。我的意思是,你可以在你的插件函數中做到這一點:'this.onChange = function(){...};'(例如,爲一個jQuery對象*添加一個函數),但我不會說合理。我一定會用你自己的活動名稱並使用'on'。 – 2015-01-04 19:28:02