jQuery ui自动完成奇怪的行为

时间:2011-04-23 04:13:54

标签: jquery regex jquery-ui jquery-ui-autocomplete

我最近开始使用jQuery-ui-autocomplete。但是,我面临着一种奇怪而又令人厌倦的行为。我正在尝试对多值远程数据(来自我的数据服务的数据)使用自动完成功能。我在逗号后提取最后一个术语的代码不起作用。我的代码如下:

function split(val) {
    return val.split(/,\s*/);
}

function extractLast(term) {
    return split(term).pop();
}

自动填充代码

$('#txtBox')
    .bind("keydown", function (event) {
        if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) {
            event.preventDefault();
        }
    })    
    .autocomplete({
        minLength: 3,
        selectFirst: true,
        source: function (request, response) {
            $.ajax('My/Data/Source.json', {
                global: false,
                success: function (data) {
                    response($.map(data.d.results, function (item) {
                        return {
                            label: item.Name,
                            id: item.id
                        }
                    }));
                }
            });
        },
        search: function () {
            // custom minLength
            var term = extractLast(this.value);
            if (term.length < 3) {
                return false;
            }
        },
        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;
        }
    });

当我将调试器放入“搜索”功能时,该术语总是大于3.这意味着它没有正确地评估正则表达式。当我加入术语

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

它完美无缺。但我不能在我的网页中包含这些内容。但是在Firefox中,这也可以在没有doctype声明的情况下正常工作。我在IE8和IE9中都试过这个并没有成功。

<小时/> 的更新 在进一步挖掘之后,发现主要问题在于IE和其他浏览器如何尝试使用正则表达式拆分最后一个术语。有了IE,第二次尝试拆分术语后,(逗号)。例如http://jsfiddle.net/mE6th/尝试在chrome和IE中打开此链接并查看差异。

1 个答案:

答案 0 :(得分:1)

如果您想要逗号分隔字符串中的最后一个字词,则不能仅使用此.split(',').pop(),例如:

'java,c++,php'.split(',').pop();

给出“php”