#c# #jquery #autocomplete
#c# #jquery #автозаполнение
Вопрос:
Я реализую многократное автозаполнение с помощью пользовательского интерфейса jQuery. Также я использую веб-сервис для передачи значений. Я проверяю демонстрацию jQuery UI на наличие множественного автозаполнения и использую точно такой же код, и он работает до первого автозаполнения и добавляет «,» в конце.
Но здесь я застрял, он не ищет следующее автозаполнение. Ну, я не добавил часть кода из демо, и я не знаю, куда он должен идти. Если бы кто-нибудь мог мне помочь, пожалуйста.
Слушайте мой код
<script type="text/javascript">
$(function () {
function split(val) {
return val.split(/,s*/);
}
function extractLast(term) {
return split(term).pop();
}
$(".tb")
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function (event) {
if (event.keyCode === $.ui.keyCode.TAB amp;amp;
$(this).data("autocomplete").menu.active) {
event.preventDefault();
}
})
.autocomplete({
source: function (request, response) {
$.ajax({
url: "EmployeeList.asmx/FetchEmailList",
data: "{ 'mail': '" request.term "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
//term: extractLast(request.term),
response($.map(data.d, function (item) {
return {
value: item.Email
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
},
search: function () {
// custom minLength
var term = extractLast(this.value);
alert(term);
if (term.length < 2) {
return false;
}
},
focus: function () {
// prevent value inserted on focus
return false;
},
select: function (event, ui) {
var terms = split(this.value);
alert(terms);
// 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;
} //,
//minLength: 2
});
});
</script>
Вот код, которого мне не хватает в демо-версии jQuery UI
.autocomplete({
source: function( request, response ) {
$.getJSON( "search.php", {
term: extractLast( request.term )
}, response );
},
Я не знаю, куда добавить этот код:
термин: extractLast(request.term )
вот ссылка на весь код Ссылка на демонстрационный код
Ответ №1:
заменить
data: "{ 'mail': '" request.term "' }"
с помощью
data: "{ 'mail': '" extractLast(request.term) "' }"
это должно сработать, но мне не очень понравилось, как вы кодируете JSON, может создать проблемы с кавычками и т.д.
Комментарии:
1. Спасибо, это сработало! Кстати, есть ли какие-либо предложения о том, что вам нужно кодировать JSON?
2. ммм, что-то вроде JSON.stringify({mail: extractLast(request.term)}), но обязательно включите JSON2.js из github.com/douglascrockford/JSON-js/blob/master/json2.js поскольку старые браузеры могут не поддерживать кодировку JSON.