我对jquery很新,最近根据我的需要定制了jquery combobox。但是,我需要在我的网站上的其他位置重用此组件。我基本上需要传入一些参数和一个回调函数,应该调用它来处理jquery中的某些事件。我正在努力学习语法并试图找到jquery-way of things:
为了给您提供示例,以下是source
的{{1}}:
(创建了一个工作jsfiddle供参考)
combobox -> input -> autocomplete -> source
此处source: function( request, response ) {
// implements retrieving and filtering data from the select
var term = request.term;
var prefixLength = 2;
if (term.length >= prefixLength) {
var abbreviation = term.substring(0, prefixLength);
if(!(abbreviation.toLowerCase() in cache)){
cache[abbreviation.toLowerCase()] = 1;
$.ajax({
url: "/wah/destinationsJson.action",
dataType: "json",
data: {
term: abbreviation
},
type: "GET",
success: function(data) {
if(!data || !data.cities || !data.cities.length){
// response(["No matches for " + term]);
return;
}
updateOptions(select, data.cities);
response(filterOptionsForResponse(select, term));
return;
}
});
}
}
response(filterOptionsForResponse(select, term));
}
,updateOptions(...)
是简单的javascript函数。
为了重用,我需要为我创建的每个组合框实例指定一个回调来处理filterOptionsForResponse(select, term)
。
有人能指出我正确的方向吗?
答案 0 :(得分:6)
唯一有用的小工具工厂文档位于wiki和that says:
中<强>属性:强>
[...]
的 this.options 强>
当前用于插件配置的选项。在实例化时,用户提供的任何选项都将自动与任何默认值合并
因此,如果您需要为source
提供回调函数,那么您可以这样说:
$("#searchbox").combobox({
source: function(request, response) { /* ... */ }
});
然后在插件中,查看this.options.source
:
$.widget("ui.combobox", {
options: {
// Default options go here...
},
_create: function() {
//...
input = $("<input>").appendTo(wrapper).val(value).addClass("ui-state-default").autocomplete({
source: this.options.source,
//...
您不必包含默认选项,但这样做几乎总是有意义的(即使您只是将其用于文档目的)。