设置jQuery自动完成匹配条件?

时间:2011-02-07 22:22:25

标签: jquery json jquery-ui autocomplete jquery-ui-autocomplete

我写了一个带有jQuery UI自动完成功能的页面。

用户打算使用自动填充功能从地点列表中选择一个位置。在此改进之前,用户必须从长列表中选择一个位置,除了一个问题之外,这会更好。

位置的格式如下:

“加拿大”

“加拿大 - >艾伯塔省”

“加拿大 - >英属哥伦比亚”

“美国”

“美国 - >阿拉巴马州”

“美国 - >阿拉斯加”

等等。所以,我通过输入“CA”来测试这个应用程序,期望列表中的国家/地区与“CA”类似:“Canada”,“United States - > California”,“Mexico - > Campeche”。

然而,令我沮丧的是,我看到所有加拿大省份逐一列出,因为“CA”与“加拿大”中的“CA”相匹配。我现在有近20种选择可供选择。

用户在查找州时必须查看具有国家/地区名称和州名称的层次结构,但“加拿大”作为国家/地区必须是单个匹配作为单个位置。

如何设置jQuery自动完成功能,以允许我在如此多的单词中指定只有“ - >”右侧的文本是匹配吗?

现在,在我的Javascript代码中,我有 var locations =“[{'label':'Canada','value','Canada'},{'label':'Canada - &gt; Alberta','value':'Alberta'} ...]。< / p>

我不想让这个工作异步。我担心这会导致太多的网络服务电话。

1 个答案:

答案 0 :(得分:0)

我想出来了。它有助于获得良好的jQuery UI参考!

对于.autocomplete方法的源变量,您可以传入自动填充数据,或者您可以将处理程序传递给函数以检索自动填充选项,如下所示:

$('#txtData').autocomplete( source: getData )

处理程序函数将传递两个参数,第一个是具有一个字段的对象:term,其中包含用户输入的文本。另一个是另一个函数的处理程序。另一个函数接受一个参数,即包含自动完成选项的数据:

function getData(userData, setAutocompleteData) {
    var userText = userData.term;
    var autocompleteData = getMatchingOptions(userText);
    // getMatchingOptions returns a list of matching autocomplete options
    setAutocompleteData(autocompleteData);
}

上面的代码框架与getMatchingOptions的实现相结合,可以让您自定义向用户显示的自动填充选项。