javascript - jQuery 函数 : pass callback functions as optional arguments to another function

标签 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() 函数,以便它可以接受可选的回调函数并将它们传递给 自动完成()

那么,你是如何做到这一点的呢?


更新

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

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

无论您是否传递回调,这都会正确绑定(bind)自动完成,但如果您传递回调,它们就不会被调用。

即:以下内容触发了自动完成,但未触发回调。

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

最佳答案

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

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() { ... }
});

关于javascript - jQuery 函数 : pass callback functions as optional arguments to another function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280839/

相关文章:

JavaScript:如何将附加信息传递到源页面?

c - 在 C 的回调函数中 fork() 是否安全?

javascript - 从另一个 React 文件调用函数

javascript - C3 图加载回调

javascript - 在其他网站上展示用户公开资料的推荐方式是什么?

javascript - 定义将在调用它的函数之后运行的回调的正确方法是什么?

reactjs - 从 useCallback 访问状态变量时,值不会更新

javascript - 在 If == 语句中选择 2 个东西?

javascript - mediaelementjs ie9 全屏事件

javascript - 在 mouseenter(悬停)上,显示和隐藏(切换)子元素