如何在jQuery组合框自动完成中匹配多个子串

时间:2012-09-21 20:30:22

标签: javascript jquery jquery-ui combobox jquery-ui-autocomplete

我使用普通的jquery自动完成功能找到了不止一些这样的例子,但不能用于the demo的组合框代码中包含的自动完成功能,因为代码的结构结构不同。

我想匹配任何单词中包含所有搜索标记的所有项目。我不需要匹配任何单词的开头,它的任何部分都可以。如果搜索字符串在自动完成列表中突出显示,如果这会使事情变得太复杂,我不在乎。

所需的搜索/结果组合:(请原谅间距)
fi th ”“ fi 第一秒 th ird”
rs on ”“fi rs t sec on d third”
ec rd ”“首先 ec ont rd
但不限于任何最大/最小长度或令牌数量。

修改

我使用我工作的其他自动更正的代码结构来计算部分内容。

source: function( requestObj, responseFunc ) {
    var matchArry = $("select > option").map(function(){return this.innerHTML;}).get();
    var srchTerms   = $.trim(requestObj.term).split(/\s+/);

    // For each search term, remove non-matches
    $.each (srchTerms, function (J, term) {
        var regX = new RegExp (term, "i");
        matchArry = $.map (matchArry, function (item) {
            if( regX.test(item) ){
                return{
                    label: item,
                    value: item,
                    option: HTMLOptionElement
                } ? item :null;
            }
        } );
    });

    // Return the match results
    responseFunc (matchArry);
},

select: function( event, ui ) {
    ui.item.option.selected = true;
    self._trigger( "selected", event, {
        item: ui.item.option
    });
    $("destination").val(ui.item.value);    // I added this line
},

但我无法同时获得多个单词并且能够单击以选择同时工作。

如果我在地图功能中删除了} ? item :null;,我可以点击选择一个项目。如果我离开它,我可以输入多个单词,但我无法点击任何项目......

这是问题还是option: this?我已尝试将其替换为HTMLOptionElementnull,但我被卡住了。

我可以在选择标签中设置ui.item.value的另一个字段的值,但不会将值放在搜索框中或关闭下拉菜单。

1 个答案:

答案 0 :(得分:0)

我一时兴起将ui.item.option = ui.item.value;添加到选择标签,一切都按预期工作。选项:源中的值现在似乎不重要。

*我没有声称任何这些都是良好的编码习惯

更新小提琴:http://jsfiddle.net/eY3hM/