автозаполнение jQuery не отображается
внутри диалога jquery я хотел бы использовать функцию автозаполнения jQuery jqueryUI.
затем я подготовил действие в своем контроллере (я использую ASP.NET MVC2), то есть следующим образом
public ActionResult GetForos(string startsWith, int pageSize)
{
// get records from underlying store
int totalCount = 0;
string whereClause = "Foro Like '" + startsWith + "%'";
List<Foro> allForos = _svc.GetPaged(whereClause, "Foro", 0, pageSize, out totalCount);
//transform records in form of Json data
List<ForoModelWS> foros = new List<ForoModelWS>();
foreach ( Foro f in allForos)
foros.Add( new ForoModelWS() { id= Convert.ToString(f.ForoId),
text= f.Foro + ", Sezione: " + f.Sezione + ", " + f.AuthorityIdSource.Name });
return Json(foros);
}
класс ForoModelWS-это простой класс, используемый только для хранения данных, которые должны быть переданы в json. Вот он
public class ForoModelWS
{
public string id;
public string text;
}
на стороне клиента у меня есть следующий код jQuery:
<input id="theForo" />
<script type="text/javascript">
$(document).ready(function() {
$("#theForo").autocomplete({
source: function(request, response) {
$.ajax({
type: "post",
url: "/Foro/GetForos",
dataType: "json",
data: {
startsWith: request.term,
pageSize: 15
},
success: function(data) {
response($.map(data, function(item) {
return {
label: item.text,
value: item.text
}
}))
}
})
},
minLength: 2,
select: function(event, ui) {
},
open: function() {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function() {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
});
</script>
но раздвижное окно с suggeestions не появляются. Если я помещу предупреждение внутри функции ответа, я смогу увидеть правильные данные.
Я что-то пропустил?
Спасибо за помощь
1-й правка: Кроме того, как изменить код, чтобы использовать свойство "id" выбранного элемента в возвращаемом списке?
2-е изд: Я проверил больше с помощью инструмента разработчика Chrome, и я видел, что при автозаполнении появляется какая-то ошибка. этот следующий:
Uncaught TypeError: Cannot call method 'zIndex' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:317
Uncaught TypeError: Cannot read property 'element' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:321
Uncaught TypeError: Cannot read property 'element' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:320
кажется, что плагин автозаполнения не находит элемент, когда он пытается установить Z-индекс скользящего предложения 1 уровень вверх по его контейнеру. Первая ошибка появляется при открытии диалогового окна jQuery UI. Вход для автозаполнения находится внутри вкладки jquery, которая находится внутри диалога jquery
3-й редактировать: Я добавляю разметку HTML, чтобы быть полным
<td width="40%">
<%= Html.LabelFor(model => model.ForoID)%>
<br />
<%= Html.HiddenFor(model => model.ForoID) %>
<input id="theForo" />
<%= Html.ValidationMessageFor(model => model.ForoID, "*")%>
</td>
5 ответов
Я нашел проблему.
в моем случае я использовал также другой плагин, этот.
этот плагин был включен в конце моих скриптов и вызвал ошибку, описанную в вопросе. Я удалил плагин и все работает очень хорошо.
прежде чем удалить его, я попытался также изолировать проблему, помещая в статический html оба скрипта. Я испытал, что даже самое простое использование функций автозаполнения, таких как это
<script type="text/javascript">
$(document).ready(function() {
var availableTags = ["ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure",
"COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript",
"Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"];
$("#theForo").autocomplete({
source: availableTags
});
});
</script>
вызовет ошибку, которую я получил.
мой выбор состоял в том, чтобы удалить плагин меню, даже если этот код больше не поддерживается.
спасибо!
это обсуждение действительно старое, однако добавление его здесь на всякий случай помогает кому-то...Если автозаполнение не работает вообще, как в раскрывающемся списке не отображается, то сначала проверьте его самую простую форму с жестко закодированными предложениями, как показано ниже.
$("#txtLanguage").autocomplete({ source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] });
Если это не работает, то это проблема связанных скриптов jquery. В моем случае jquery.минута.js была более старой версией 1.7.1, тогда как все остальные скрипты были 1.8.18.
просто заменяя правильное версия скрипта решила проблему.
надеюсь, это поможет кому-то споткнуться с основной проблемой получения автозаполнения для работы.
Так же, как я ответил здесь, возьмите добычу на моем рабочем примере автозаполнения jQuery UI. Обратите внимание на source
часть. Надеюсь, это поможет:
var cache = {};
$("#textbox").autocomplete({
source: function(request, response) {
if (request.term in cache) {
response($.map(cache[request.term].d, function(item) {
return { value: item.value, id: item.id }
}))
return;
}
$.ajax({
url: "/Services/AutoCompleteService.asmx/GetEmployees", /* I use a web service */
data: "{ 'term': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function(data) { return data; },
success: function(data) {
cache[request.term] = data;
response($.map(data.d, function(item) {
return {
value: item.value,
id: item.id
}
}))
},
error: HandleAjaxError // custom method
});
},
minLength: 3,
select: function(event, ui) {
if (ui.item) {
formatAutoComplete(ui.item); // custom method
}
}
});
Если вы не делаете этого сейчас, get Firebug. Это бесценный инструмент для веб-разработки. Вы можете установить точку останова на этом JavaScript и посмотреть, что произойдет.
fgmenu с помощью функции menu () и автозаполнения с помощью функции
имя функции те же проблемы возникают
вы можете изменить имя функции в fgmenu.js
$('#hierarchybreadcrumb6').menuA({content: $('#hierarchybreadcrumb6').next().html(),backLink: false});
на основе ответа Лоренцо я изменил
$.fn.fgmenu = function(options) { ...
to
$.fn.fgmenu = function(options) { ...
из этого Плагины меню и он работал нормально (как автозаполнение, так и плагин меню)