jquery - jQuery UI 自动完成的 "response"回调中的 "request"和 "source"参数是什么?

标签 jquery jquery-ui jquery-ui-autocomplete

我正在查看自动完成教程,我有几个问题: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;
                }
            });

所以我理解源的参数是requestresponse。这些是保留关键字吗?当我在谷歌中输入这个时,我找不到任何东西。我不清楚这里传递的请求和响应是什么。请求只是获取输入吗?我在哪里可以阅读更多相关内容?

最佳答案

不,requestresponse 不是保留关键字 - 如果是,则不能将它们用作函数参数名称。

这里发生的事情非常简单,如果您在 Node 中执行过任何操作,您就会看到该模式。它是异步 JavaScript。

您正在将匿名函数传递给source。每当自动完成需要查询数据源(换句话说,用户输入了一些内容)时,就会调用此函数。

该函数的参数是请求响应request 只是自动完成请求的信息; request.term 是查询(用户输入的内容)。如何实现搜索取决于您 - 也许您有一个可能的局部变量,或者您可以对服务器进行 AJAX 调用。

现在是重要的部分:如果您正在进行 AJAX 调用,则不能简单地从 source()返回一个值,因为该函数将在很久之前返回AJAX 调用完成。这就是为什么有一个 response 参数。

response 是传递给 source() 函数的函数引用,只要您得到请求的答案,您就可以调用该函数。通过闭包的魔力,您可以从 AJAX 回调内部调用此函数。

response(可以更容易地命名为callback)需要一个字符串数组或带有labelvalue<的对象数组 属性。它将在自动完成下拉列表中显示这些结果。

把它们放在一起:

$('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/

相关文章:

JQuery - 如何获取按比例自动确定的图像的宽度或高度?

JavaScript,我正在发出 ajax 请求,我需要帮助浏览该对象

javascript - 将顶部位置设置为可拖动父项内的可拖动子项

jquery - jQuery 自动完成 + AngularJS 的问题

javascript - "Term"特性中传入的默认 "jquery UI autocomplete"名称是否可以更改?

jquery - 选择后清除 Jquery 自动完成中的文本框

javascript - if语句后的jquery回调

jQuery 和 Table,抓取 NTH 列中的每个单元格

javascript - jQuery animate 的属性顺序很重要吗?

jquery - 如何在自动完成中找到所选元素的类别?