我最近开始使用jQuery-ui-autocomplete。不过,我正面临着一种奇怪而又狡猾的行为。我正在尝试为多值远程数据(来自我的数据服务的数据)使用自动完成功能。我的代码在逗号后面提取最后一个术语不起作用。我的代码:jQuery ui自动完成奇怪行为
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中,这个工作正确没有文档类型声明也。我在IE8和IE9中都尝试过这两种方式,但都没有成功。
UPDATE 经过深入挖掘,发现主要问题在于IE和其他浏览器如何试图用正则表达式分割上一项。使用IE浏览器时,它第二次试图分割术语后,(逗号)。例如 http://jsfiddle.net/mE6th/尝试在chrome和IE中打开此链接并查看区别。
那么,什么是你当前的doctype或不要”你现在有什么权利吗? – 2011-04-23 04:36:58
截至目前没有任何文档类型。请参阅我的更新。问题似乎缩小了我认为的正则表达式。 – Ashish 2011-04-23 04:38:53
我碰到过这篇文章:http://blog.stevenlevithan.com/archives/cross-browser-split – user670800 2011-04-23 04:59:22