У меня есть простое веб-приложение, в котором я создал мастер, каждая страница мастера содержит разные поля формы, которые заполняются из базы данных, поскольку пользователь нажимает следующие данные страницы, извлекается с сервера с помощью вызова Ajax. Вот код страницы, который извлекается с сервера по вызову Ajax. Я делаю это простым, чтобы понять ..
function printAdAlertWizardStep($step) { switch($step) { case 1: //step of wizard, first step print "Welcome to alert wizard,..."; break; case 2: //second step of wizard which contains the text field to which I want to attach autocomplete list. ?> <table> <tr> <td>Keywords</td> <td><!-- This is text field to which I want to attach autocomplete --> <input id="nalertkw" name="nalertkw" size="10" type="text"> </td> </tr> </table> <?php break; } } }
И код сценария Java для прикрепления текстового поля Autocomplete to keywords
//Script will be executed when the page is ready for scripting $(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" ]; $( "#nalertkw" ).autocomplete({ source: availableTags }); });
Теперь проблема заключается в том, что форма загружается после того, как пользователь нажимает рядом, а функция $(document).ready()
запускается уже тогда, когда текстовое поле #nalertkw
не существует. Таким образом, автозаполнение не работает. Я использую автозаполнение Jquery-UI , как я могу присоединить автозаполнение к текстовому полю, которое загружается через вызов Ajax?
Кроме того, я проверил свою установку на простой странице (без вызова Ajax) с текстовым полем и таким же образом привязал автозаполнение к этому текстовому полю. Он работает абсолютно нормально. Он подтверждает, что настройка автозаполнения верна, но она не работает, если она прикреплена к текстовому полю, которое извлекается через вызов Ajax.
Попробуйте подключить событие в обработчике вызовов Ajax: обработчик успеха, например,
$.ajax({ url: "page.aspx/FetchEmailList", data: "{ 'mail': '" + request.term + "' }", dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", dataFilter: function (data) { return data; }, success: function (data) { $( "#nalertkw" ).autocomplete({ source: availableTags }); } })) } });
лучшее решение, которое я нашел
$("#nalertkw").live("keydown.autocomplete", function(){ $(this).autocomplete({ source: availableTags }); });
как только текст будет нажат, к нему присоединяется автозаполнение … кто-то ответил на это решение на мой вопрос, но удалил его ответ. Я делаю небольшие изменения в его коде, и он начинает работать, поэтому я решил добавьте ответ, чтобы помочь другим. Спасибо всем вам за ваши предложения. @Raghav, решение также выглядит неплохо, и я думаю, что он будет работать также. Так что повышайте для вас @Raghav. Благодарю.
После загрузки новой страницы выполните свой автозаполненный вызов. Что-то вроде:
jQuery.post('[url]', '[arguments]', function(data, status){ jQuery("[pageframe]").html(data); var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ]; $( "#nalertkw" ).autocomplete({ source: availableTags }); }, "html");
Это может быть одно и то же требуемое действие, и в нем говорится, что решение «Умммарка» тоже правильное.
Bind jQuery UI автозаполнения с использованием .live ()