我正在查看自动完成教程,我有几个问题:http://jqueryui.com/demos/autocomplete/#option-disabled
$( "#tags" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function( request, response ) {
// delegate back to autocomplete, but extract the last term
response( $.ui.autocomplete.filter(
availableTags, extractLast( request.term ) ) );
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
所以我理解源的参数是request
和response
。这些是保留关键字吗?当我在谷歌中输入这个时,我找不到任何东西。我不清楚这里传递的请求和响应是什么。请求只是获取输入吗?我在哪里可以阅读更多相关内容?
最佳答案
不,request
或 response
不是保留关键字 - 如果是,则不能将它们用作函数参数名称。
这里发生的事情非常简单,如果您在 Node 中执行过任何操作,您就会看到该模式。它是异步 JavaScript。
您正在将匿名函数传递给source
。每当自动完成需要查询数据源(换句话说,用户输入了一些内容)时,就会调用此函数。
该函数的参数是请求
和响应
。 request
只是自动完成请求的信息; request.term
是查询(用户输入的内容)。如何实现搜索取决于您 - 也许您有一个可能的局部变量,或者您可以对服务器进行 AJAX 调用。
现在是重要的部分:如果您正在进行 AJAX 调用,则不能简单地从 source()
中返回
一个值,因为该函数将在很久之前返回AJAX 调用完成。这就是为什么有一个 response
参数。
response
是传递给 source()
函数的函数引用,只要您得到请求的答案,您就可以调用该函数。通过闭包的魔力,您可以从 AJAX 回调内部调用此函数。
response
(可以更容易地命名为callback
)需要一个字符串数组或带有label
和value<的对象数组
属性。它将在自动完成下拉列表中显示这些结果。
把它们放在一起:
$('selector').autocomplete({
...
source: function(request, response) {
// calculate results for a query.
response([{ label: 'Example', value: 'ex' }]);
}
});
关于jquery - jQuery UI 自动完成的 "response"回调中的 "request"和 "source"参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9934018/