2009-09-29 14 views
14

Jestem nowy w jquery, pracuję na stronie internetowej, która wymaga dynamicznego generowania pól tekstowych przy pomocy narzędzia autocomplete.Automatyczne wypełnianie jquery dla dynamicznie generowanych pól tekstowych

Przetestowałem $("#some").autocomplete(data); na niektórych statycznych treściach, działało idealnie.

Jednak gdy spróbuję tej samej techniki z dynamicznie generowanymi polami tekstowymi, to nie działa!

mój kod wygląda następująco:

$(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); 
}); 

dzięki chłopaki Skończyłem z tym z ur pomoc.

teraz kolejny problem. wczytuję tablicę (wejście do autouzupełniania) z call.as DWR poniżej

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

Problem polega każdym nawiązywaniu połączenia DWR DB uzyskać tablicę!

Czy istnieje sposób przechowywania tablicy z DWR w zmiennej globalnej?

pozdrowienia

+0

hej, inny używam wywołania dwr, aby wypełnić tablicę jako: DwrService.populateProducts (someFunc); funkcja someFunc (result) { autoProducts = result; \t \t \t \t \t \t input.autocomplete (wynik); } problemem jest za każdym razem wywoływanie funkcji dwr! czy można zapisać wynik wywołania dwr w zmiennej gloabal? –

Odpowiedz

11

Głównym problemem jest to, że wywołujesz autouzupełnianie poza obsługą kliknięcia. Tak więc autouzupełnianie jest konfigurowane podczas ładowania strony, a nie po kliknięciu przycisku.

Aby rozwiązać ten problem, zmień kod w brzmieniu:

$(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); 

    }); 
}); 

Teraz autocompletion jest ustawiony na każdej nowej pozycji, a nie raz na początku.

+1

Nie jestem pewien, czy jest to kwestia _entire_ (punkt karim79 na temat białych znaków również może być ważny), ale jest to zdecydowanie problem _key_. Element wymagający autouzupełniania nie istnieje po wywołaniu funkcji autouzupełniania, ponieważ żadne zdarzenie nie spowodowało jej utworzenia. –

+0

Z pewnością, jeśli element wejściowy zostanie dodany do strony, białe znaki nie są problemem? – Kazar

+0

niesamowite, działało idealnie zadziwił mnie szybkość odpowiedzi nawet jestem nowy do przepełnienia stos dziękuję bardzo. –

1

Niektóre myśli:

  • Gdzie jest licznik inicjowane?
  • Spróbuj pozostawiając przestrzeń pomiędzy „typu” i „” nazwy atrybutów swoich tagów wejściowych <input type='text' name='td_products... >, że może uniemożliwiać filtr atrybutu startsWith od dopasowania czegokolwiek.
+0

dzięki za repla, właśnie podałem kilka przykładowy kod, ale wszystkie te rzeczy są doskonale umieszczone w moim kodzie –

+0

@sangram - Myślę, że @Kazar zauważył główny problem, zobacz swoją odpowiedź. – karim79

0

Dodajesz nowe wejście, klikając #button_newproduct, ale dodajesz autouzupełnianie tylko raz w funkcji, poza kliknięciem.

Sprawdź jQuery live

+2

Na żywo nie będzie działać z autouzupełnianiem, działa tylko z wydarzeniami. – Kazar

+1

Ah, oczywiście, duh me, z jakiegoś powodu zostałem przyłapany na "kliknięciu" zamiast autouzupełniania. – Steerpike

5

Trzeba dodać obsługi autouzupełniania do każdego elementu, jak go dodać. Elementy, które nie istnieją podczas ładowania dokumentu, nigdy nie zostaną zastosowane w inny sposób. Poza tym lepiej byłoby utworzyć osobny wiersz i dane wejściowe. W ten sposób możesz po prostu użyć referencji do nowo utworzonego wejścia i użyć go z wtyczką autouzupełniania.

$(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); 

    }); 
}); 
+0

dziękuję, zadziałało. –

+0

bardzo dziękuję, 'musisz dodać handlarz autouzupełniania do każdego elementu podczas dodawania. Ta linia bardzo mi pomaga .. bardzo dziękuję .. –

1

Najprostszym sposobem jest użycie:

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

wewnątrz funkcji javascript, który generuje nowy element.

Powiązane problemy