Jquery auto complete для динамически генерируемых текстовых полей

Я новичок в jquery, я работаю над веб-страницей, которая динамически генерирует текстовые поля с помощью средства autocomplete.

i тестировал $("#some").autocomplete(data); на каком-то статическом контенте, он отлично работал.

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

мой код выглядит следующим образом:

$(function() {  

  $("#button_newproduct").click(function(){  
    $("#products_table > tbody").append(
      "<tr><td><input type='text'name='td_products["+counter+"]'/></td></tr>");
  });
  var data = "Core celectors cttributes craversing canipulation CSS cvents cffects cjax ctilities".split(" ");
  $('input[name^=td_products]').autocomplete(data);
});

Спасибо, ребята, я покончил с этим с помощью справки.

теперь, еще одна проблема. Я загружаю массив (ввод в автозаполнение) с помощью вызова DWR. ниже

DwrService.populateProducts(someFunc);
function someFunc(result){
    autoProducts=result;
    input.autocomplete(result);
 }

здесь проблема заключается в каждом вызове DWR в БД для получения массива!

Есть ли способ сохранить массив из DWR в глобальной переменной?

рассматривает

Ответы

Ответ 1

Основная проблема, я думаю, заключается в том, что вы вызываете автозаполнение вне обработчика кликов. Таким образом, автозаполнение настраивается при загрузке страницы, а не при нажатии кнопки.

Чтобы устранить это, измените код для чтения:

$(function() {

    $("#button_newproduct").click(function() {

        var newItem = $("<tr><td><input type='text'name='td_products["+counter+"]'/></td></tr>");

        $("#products_table > tbody").append(newItem); 

        var data = "Core celectors cttributes craversing canipulation CSS cvents cffects cjax ctilities".split(" "); 
        newItem.find('input').autocomplete(data);

    });
});

Теперь автозаполнение устанавливается на каждый новый элемент, а не один раз, в начале.

Ответ 2

Вам нужно добавить обработчик автозаполнения для каждого элемента при его добавлении. Элементы, которые не существуют при его применении при загрузке документа, никогда не будут применяться в противном случае. Кроме того, вам будет лучше создавать строку и вход отдельно. Поступая таким образом, вы можете просто использовать ссылку на вновь созданный вход и использовать его с плагином автозаполнения.

$(function() {  

    $("#button_newproduct").click(function(){
         var input = $("<input type='text' name='td_products["+counter+"]' />");
         var row = $('<tr />').append( $('<td />').append(input) );  
         $("#products_table > tbody").append(row);
         var data = "Core celectors cttributes craversing canipulation CSS cvents cffects cjax ctilities".split(" ");
         input.autocomplete(data);

    });
});

Ответ 3

Некоторые мысли:

  • Где инициализируется счетчик?
  • Попробуйте оставить пробел между 'type' и 'name' атрибуты вашего теги ввода <input type='text' name='td_products... >, которые могут помешать вашему фильтру атрибутов startsWith соответствовать чему-либо.

Ответ 4

Самый простой способ - использовать:

$( ".some" ).autocomplete({source: data});

внутри функции javascript, которая генерирует новый элемент.

Ответ 5

Вы добавляете новый ввод, когда вы нажимаете #button_newproduct, но вы добавляете только автозаполнение один раз в функцию, вне клика.

Проверить jquery live