我最近开始使用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中打开此链接并查看差异。
答案 0 :(得分:1)
如果您想要逗号分隔字符串中的最后一个字词,则不能仅使用此.split(',').pop()
,例如:
'java,c++,php'.split(',').pop();
给出“php”