我最近開始使用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