Я недавно начал использовать 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, но безуспешно.
<Ч />
UPDATE
Пройдя немного дальше, обнаружил, что основная проблема заключается в том, как IE и другие браузеры пытаются разделить последний член с помощью регулярного выражения. С IE, когда во второй раз он пытался разделить термины после, (запятая). Например, http://jsfiddle.net/mE6th/ попробуйте открыть эту ссылку в Chrome и IE и увидеть разницу.