Зарегистрируйте динамическое управление, используя jquery для автозаполнения

StackOverflow https://stackoverflow.com/questions/1812207

Вопрос

Я создаю текстовые поля динамически, используя jquery по нажатию кнопки.

<table width="100%" border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td>
                <div id="lblCustName">
                </div>
            </td>
            <td>
                <div id="lblRemove">
                </div>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="button" value="Add" id="AddRow" />
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="Submit" id="SaveCustomers" />
            </td>
        </tr>
        </table>

     <script type="text/javascript" language="javascript">
        $(document).ready(function() {
           //validate post form
            $("#CustomersForm").validate({ ignore: ":not(:visible)" });
           //Initialize the dynamic id
           _DynId = 1;
           //Click Event for Customers
            $('#AddRow').click(function(e) {
                $('#lblCustName').append('<div id="lblCustName' + _DynId + '" style="height:20px;padding-left:10px;">' + '<input type="text" name="CustName" id="CustName' + _DynId + '" class="required" value="" title="*" />');
                $('#lblRemove').append('<div id="lblRemove' + _DynId + '" style="height:20px;padding-left:10px;">' + '<img src="../../Content/Images/delete_icon.gif" onclick=Remove("' + _DynId + '"); title="Remove" id="iRemove' + _DynId + '"></img>');
                _DynId += 1;
            });
 </script>

Я пытаюсь добавить текстовое поле для клиентов динамически. Это пример HTML для функциональности добавления клиентов для обработки отчетов, ... Мне нужно дать опцию автозаполнения для текстовых полей.

Я использовал приведенный ниже скрипт для этого:

$.getJSON("/User/GetAllCustomers/?t=" + new Date(), {},
         function(data) {
             if (data != null) {
                 $("input:text[name=CustName]").autocomplete(data, { mustMatch: false, matchContains: 4, max: 50,
                     formatItem: function(row) {
                         if (row.CustomerName!= "") {
                             return row.CustomerName;
                         }
                     },
                     formatResult: function(row) {
                         return row.CustomerName;
                     }
                 }).result(function(e, row) {
                    //do something
                 });
             }
         });

Автозаполнение не работает для динамически добавленных элементов управления.

Я пытаюсь при любой возможности зарегистрировать динамически добавленные элементы управления в форме, чтобы автозаполнение работало для динамически добавленных элементов управления

Это было полезно?

Решение

Проблема в том, что когда вы связываете это автозаполнение, оно связывается с полями, которые соответствуют селектору при запуске функции. Если позже вы добавите что-то, что также соответствует, оно не будет автоматически связываться.

Для основных событий jQuery есть Live привязка, которая позволяет вам делать это автоматически, но автоматически завершать не будет работать через это - в основном ваш единственный выбор - привязывать новое автозаполнение каждый раз, когда вы добавляете новое текстовое поле

EG: добавить в функцию AddRow:

$("#lblCustName" + _DynId + " input[name=CustName]").autocomplete(...);

(очевидно, замена ... на нужные параметры)

Скорее всего, вы захотите поместить свой объект данных, который вы извлекли из веб-сервиса, в глобальную переменную, чтобы поддерживать это, и, вероятно, то же самое с опциями автозаполнения (просто чтобы избежать дублирования кода).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top