jQuery函数:将回调函数作为另一个函数的可选参数传递

时间:2012-11-08 00:52:04

标签: javascript jquery callback

我编写了以下便捷功能,让我可以轻松地在元素上放置jquery UI自动完成功能。

jQuery.fn.bindAutocomplete = function() {
  $(this).each( function() {
    $(this).autocomplete({
      source: $(this).data('autocomplete-source')
    });
  });
}

我总是使用将data-autocomplete-source附加到元素的约定,所以我可以在任何地方调用它:

$('input#name').bindAutocomplete();

现在,自动完成功能可以在选项哈希之后将回调函数作为可选参数。我几乎从不需要弄乱它,但我发现在少数情况下我想通过成功函数。显然我可以在需要传递回调函数时重写完整的自动完成功能,但我只想重写我的bindAutocomplete()函数,以便它可以接受可选的回调函数并将它们传递给autocomplete()。 / p>

那么,你是怎么做到的?


更新

我尝试了这个,基于一个接近但不完全的答案:

jQuery.fn.bindAutocomplete = function(callbacks) {
  $(this).each( function(callbacks) {
    options = $.extend({source: $(this).data('autocomplete-source')}, callbacks);
    $(this).autocomplete(options);
  });
}

无论你是否传递回调,这都会正确地绑定自动完成,但如果你确实传递回调,则不会被调用。

即:以下触发自动完成但不是回调。

$('input#name').bindAutocomplete({ select: function(){alert("working");} })

1 个答案:

答案 0 :(得分:2)

如果这就是你的意思,我想你可以这样做......

jQuery.fn.bindAutocomplete = function( opts ) {        
  return this.each(function(){
    opts = $.extend({
      source: $(this).data('autocomplete-source')
    }, opts);
    $(this).autocomplete( opts );
  });
}

$('input#name').bindAutocomplete({
  change: function() { ... },
  close: function() { ... }
});
相关问题