2011-11-05 13 views
11

mam następujące:Jak dodać dodatkowy wiersz tabeli html po kliknięciu przycisku za pomocą jQuery?

<table> 
    <tr><td>author's first name</td><td>author's last name</td></tr> 
    <tr><td><input type='text' name='first_name' /></td><td><input type='text' name='last_name' /></td></tr> 
</table> 
<a href='' onclick='return false;'>Add Author</a> 

i za każdym razem klikam tag link do 'dodać autora, chcę utworzyć dodatkowy wiersz tabeli jak poniżej:

<tr><td><input type='text' name='first_name2' /></td><td><input type='text' name='last_name2'</td></tr> 

spojrzałem na .append() i nie jestem pewien, jak go użyć w mojej sytuacji. I chciałbym móc dodać nieskończoną ilość nowych wierszy tabeli. Jak mam to zrobic?

+0

zobacz http://stackoverflow.com/questions/171027/add-table-row-in-jquery –

Odpowiedz

14

Po pierwsze, poprawić HTML jako:

<table class="authors-list"> 
    <tr> 
     <td>author's first name</td><td>author's last name</td> 
    </tr> 
    <tr> 
     <td> 
      <input type="text" name="first_name" /> 
     </td> 
     <td> 
      <input type="text" name="last_name" /> 
     </td> 
    </tr> 
</table> 
<a href="#" title="" class="add-author">Add Author</a> 

(Dodałem wcięcia tylko dla widoczności) i nie używać inline JavaScript. Plus, bądź konsekwentny, najlepiej używaj " (podwójne cudzysłowy) dla atrybutów HTML, ' (pojedyncze cudzysłowy) dla ciągów JavaScript.

drugie, zrobić coś takiego:

jQuery(function(){ 
    var counter = 1; 
    jQuery('a.add-author').click(function(event){ 
     event.preventDefault(); 

     var newRow = jQuery('<tr><td><input type="text" name="first_name' + 
      counter + '"/></td><td><input type="text" name="last_name' + 
      counter + '"/></td></tr>'); 
      counter++; 
     jQuery('table.authors-list').append(newRow); 

    }); 
}); 

Będzie dodać wiersz do tabeli z każde kliknięcie na link posiadającego klasę add-author (tak aby mieć pewność, żaden inny związek jest influented), zwiększając liczbę na koniec nazwy każdej wstawionej nazwy pola przez 1. Wiersz zostanie wstawiony na końcu tabeli o klasie authors-list (ten sam powód, co w przypadku klasy dla łącza). Zobacz dowód: this jsfiddle.

+0

Używam pojedynczych cytatów tak często, jak tylko mogę, ponieważ jest to jedno naciśnięcie klawisza w całym kodzie, który piszę, ale jeśli byłbyś na tyle uprzejmy, aby podać mi konkretny powód, dla którego powinienem użyć podwójnych i pojedynczych cudzysłowów, o czym wspomniałeś , Chciałbym zmienić moje preferencje dotyczące kodowania. Nadal jestem nowicjuszem w świecie kodowania (studiowałem tylko przez około 8 miesięcy od php) i chętnie korzystam z dobrej rady. –

+1

@Qlidnaque: Po prostu bądź konsekwentny i używaj różnych typów cytatów (różnych dla JavaScript i różnych dla HTML/CSS, aby zminimalizować prawdopodobieństwo błędów).W przypadku ** PHP ** jest to ważniejsze, ponieważ gdy używasz podwójnych cudzysłowów dla ciągów, które nie zawierają żadnych zmiennych, możesz przypadkowo znaleźć się w sytuacji, w której pojawia się błąd i nie możesz go szybko znaleźć. W przypadku ** JavaScript ** chodzi bardziej o wybór standardu kodowania. Staram się przestrzegać standardu kodowania MooTools (https://github.com/mootools/mootools-core/wiki/syntax-and-coding-style-conventions). – Tadeck

+0

@Tadeck jak mogę wyświetlić dynamiczne dane w wierszu tabeli, który pochodzi z php? tak jak mam zaznaczone pola we wszystkich tdach i tam dane pochodzą z bazy danych, takich jak kraj, specjalizacje lekarza w dodatkowych. Z góry dziękuję. –

3

Sprawdź to here.

Prawdopodobnie będziesz chciał zwiększyć liczbę w atrybutach nazwy w każdej iteracji.

0

Podaj identyfikator tabeli, załóżmy my_table i id do zakotwiczony a załóżmy my_button następnie spróbuj poniżej:

kodzie modyfikowany:

<table id="my_table"> 
<tr><td>author's first name</td><td>author's last name</td></tr> 
<tr><td><input type='text' name='first_name' /></td><td><input type='text' name='last_name' /></td></tr> 
</table> 
<a id="my_button" href='#'>Add Author</a> 

i dodaj poniższy skrypt po uwzględnieniu biblioteka jquery na twojej stronie.

$(document).ready(function() 
{ 
    new_row="<tr><td><input type='text' name='first_name2' /></td><td><input type='text' name='last_name2'</td></tr>"; 
    $("#my_button").click(function() 
    {  
    $("#my_table").append(new_row); 
    return false; 

    } 
} 
+0

-1, aby nie używać 'var' dla nowo utworzonych zmiennych. Sprawi, że będą globalni i zanieczyszczą globalną przestrzeń nazw. Drugi powód jest niespójny w przypadku cytatów w HTML. Trzecim powodem nie byłoby użycie [event.preventDefault()] (http://api.jquery.com/event.preventDefault/) (co zwiększyłoby użyteczność kodu), ale nie mogę podać -3 zamiast -1. Przepraszam. – Tadeck

+0

Tak, masz rację. Właśnie podałem minimalne rozwiązanie do tworzenia nowych wierszy za pomocą jego kodu html. Będzie to problem z uzyskaniem wartości z jego nowo utworzonych elementów, ale jak już wspomniał, chciałby stworzyć INFINITE wiersze, wydawało się, że był zainteresowany właśnie testowaniem. W każdym razie twój kod jest praktycznym rozwiązaniem. Dzięki ! –

Powiązane problemy