2011-11-05 8 views
11

Ho il seguente:Come aggiungo una riga della tabella html aggiuntiva al clic del pulsante usando 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> 

e ogni volta che clicco sul link tag a 'aggiunga autore', voglio creare una riga della tabella extra come il seguente:

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

ho guardato .append() e non sono sicuro di come utilizzarlo per la mia situazione. E mi piacerebbe poter aggiungere infinite quantità di nuove righe di tabella. Come faccio a fare questo?

+0

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

risposta

14

In primo luogo, correggere il codice HTML come:

<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> 

(ho trattino aggiunto solo per visibilità) e non utilizzare JavaScript inline. Inoltre, sii coerente, preferibilmente usa " (virgolette doppie) per gli attributi HTML, ' (virgolette singole) per le stringhe JavaScript.

In secondo luogo, fare qualcosa di simile:

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

    }); 
}); 

Sarà aggiungere una riga al tavolo con ogni click sul link con classe add-author (giusto per essere sicuri nessun altro collegamento è influented), numero incrementale a la fine del nome del nome di ogni campo inserito per 1. La riga verrà inserita alla fine della tabella con la classe authors-list (stesso motivo della classe per un collegamento). Vedere this jsfiddle come prova.

+0

Io uso le virgolette il più possibile dato che è una battitura in meno in tutto il codice che scrivo, ma se vuoi essere abbastanza gentile da darmi una ragione specifica per cui dovrei usare le virgolette doppie e singole come hai menzionato , Mi piacerebbe cambiare le mie preferenze di codifica. Sono ancora nuovo nel mondo della programmazione (sto studiando a tempo pieno per circa 8 mesi di php) e sono felice di ricevere qualsiasi buon consiglio. –

+1

@Qlidnaque: basta essere coerenti e utilizzare diversi tipi di virgolette (diverse per JavaScript e diverse per HTML/CSS, in modo da ridurre al minimo la possibilità di errori).In caso di ** PHP ** è più importante, perché quando si usano le virgolette doppie per le stringhe che non contengono variabili, si potrebbe accidentalmente trovarsi in una situazione in cui appare qualche bug e non si è in grado di trovarlo rapidamente. In caso di ** JavaScript ** questo è più sulla scelta dello standard di codifica. Cerco di seguire [lo standard di codifica di MooTools] (https://github.com/mootools/mootools-core/wiki/syntax-and-coding-style-convenzioni). – Tadeck

+0

@Tadeck come posso visualizzare i dati dinamici nella riga della tabella che proviene da php? come ho caselle di selezione in tutti i tds e ci sono dati provenienti da db come paese, specializzazioni mediche in extra. Grazie in anticipo. –

3

Check it out here.

Probabilmente vorrete aumentare il numero negli attributi del nome in ogni iterazione.

0

Dare un id al vostro tavolo, supponiamo my_table e un ID per l'ancora un my_button supponiamo quindi provare il seguito:

tuo codice modificato:

<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> 

e aggiungere il seguente script dopo compreso il libreria jQuery nella tua pagina.

$(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 per non utilizzare 'var' per le variabili appena create. Li renderà globali e inquinanti lo spazio dei nomi globale. La seconda ragione è contraddire le citazioni in HTML. Terzo motivo non sarebbe l'utilizzo di [event.preventDefault()] (http://api.jquery.com/event.preventDefault/) (che aumenterebbe l'usabilità del codice), ma non sono in grado di fornire -3 anziché -1. Scusate. – Tadeck

+0

Sì, hai ragione. Ho appena fornito la soluzione minima per creare nuove righe usando il suo codice html. Sarà un problema ottenere i valori dai suoi elementi appena creati, ma come ha accennato vorrebbe creare righe INFINITE, sembrava interessato ai soli test. Ad ogni modo, il tuo codice è una soluzione pratica. Grazie ! –