2015-01-04 84 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