Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery函数:将回调函数作为可选参数传递给另一个函数_Javascript_Jquery_Callback - Fatal编程技术网

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

Javascript jQuery函数:将回调函数作为可选参数传递给另一个函数,javascript,jquery,callback,Javascript,Jquery,Callback,我编写了以下方便函数,以便轻松地将jQueryUIAutoComplete放在元素上 jQuery.fn.bindAutocomplete = function() { $(this).each( function() { $(this).autocomplete({ source: $(this).data('autocomplete-source') }); }); } 我总是使用将数据自动完成源附加到元素的约定,这样我就可以在任何地方调用它,就像这样:

我编写了以下方便函数,以便轻松地将jQueryUIAutoComplete放在元素上

jQuery.fn.bindAutocomplete = function() {
  $(this).each( function() {
    $(this).autocomplete({
      source: $(this).data('autocomplete-source')
    });
  });
}
我总是使用将
数据自动完成源
附加到元素的约定,这样我就可以在任何地方调用它,就像这样:

$('input#name').bindAutocomplete();
现在,autocomplete函数可以将回调函数作为选项散列后的可选参数。我几乎不需要去处理这个问题,但我发现在少数情况下,我希望传递一个成功函数。显然,我可以在需要回调时重写完整的autocomplete函数,但我宁愿重写我的
bindsautocomplete()
函数,这样它就可以接受可选的回调函数并将它们传递给
autocomplete()

那么,你是怎么做到的


更新

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

jQuery.fn.bindAutocomplete = function(callbacks) {
  $(this).each( function(callbacks) {
    options = $.extend({source: $(this).data('autocomplete-source')}, callbacks);
    $(this).autocomplete(options);
  });
}
无论是否传入回调,这都会正确绑定autocomplete,但如果确实传入回调,则不会调用它们

Ie:下面触发了自动完成,但没有回调

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

我不得不编辑我的代码几次,但这应该可以很好地工作,但还没有尝试。嗯,这在我的测试中似乎不起作用。使用您的精确代码,它不会绑定自动完成。我试图修改并将其粘贴到我的问题中,但我的尝试也没有成功。啊哈!现在它起作用了。那么,$.extend只是将选项添加到一个可以通过的对象中?