2011-11-05 6 views
11

私は、次のしている:jQueryを使用してボタンクリック時に追加のhtmlテーブル行を追加するにはどうすればよいですか?

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

と、私は「作者を追加する」にリンクタグをクリックするたびに、私は次のような余分なテーブルの行を作成したい:

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

私が見.append()と私は私の状況のた​​めにそれを使用する方法を正確にはわかりません。そして、無限の量の新しいテーブル行を追加できるようにしたいと思います。これはどうすればいいですか?

+0

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

答えて

14

まず、としてあなたのHTMLを修正します。さらに、HTML属性には"(二重引用符)、JavaScript文字列には'(一重引用符)を使用することをお勧めします。各クラスadd-authorを(ちょうど他のリンクがinfluentedされていないことを確認するように)を有するリンクをクリックで番号をインクリメントし、それが持つテーブルに行を追加します

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

    }); 
}); 

第二には、そのような何かを行います挿入された各フィールドの名前の終わりが1で終わります。行はクラスauthors-listのテーブルの最後に挿入されます(リンクのクラスと同じ理由)。証明として、this jsfiddleを参照してください。

+0

私が書くことができるすべてのコードでキーストロークが1つ少ないので、私はできるだけ一重引用符を使用しますが、あなたが言及したように二重引用符を使用する必要がある特定の理由私はコーディングの好みを変えたいと思う。私はまだコーディングの世界に慣れていない(phpの約8ヶ月間だけフルタイムを勉強している)、良いアドバイスを取ってうれしい。 –

+1

@Qlidnaque:異なるタイプの引用符を使用してください(JavaScriptでは異なり、HTML/CSSでは異なるので、間違いの可能性は最小限に抑えられます)。** PHP **の場合は、変数が含まれていない文字列に二重引用符を使用すると、バグが見つかってすぐに見つからないという状況に陥ってしまうことがあります。 ** JavaScript **の場合、これはコーディング標準の選択に関するものです。私は[MooToolsのコーディング標準](https://github.com/mootools/mootools-core/wiki/syntax-and-coding-style-conventions)に従います。 – Tadeck

+0

@Tadeckどのように私はPHPから来ているテーブルの行に動的なデータを表示できますか?私はすべてのTDSで選択ボックスを持っており、そこには国のようなデータベースからのデータが入っています。前もって感謝します。 –

3

hereを確認してください。

おそらく、各反復で名前属性の数を増やしたいと思うでしょう。

0

あなたのテーブルにIDを与えるには、MY_TABLEと仮定してアンカーへのidは考えmy_buttonというは、以下試してください。

あなたの修正コード:

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

を含むとした後、以下のスクリプトを追加しますあなたのページのjqueryライブラリ

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

(私は唯一の可視性のためにインデントを追加している)とインラインJavaScriptのを使用しないでください:

$(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新しく作成された変数に 'var'を使用しないためです。それはそれらをグローバルにし、グローバルな名前空間を汚染します。第2の理由は、HTMLの引用符が一貫していないことです。 3つ目の理由は、[event.preventDefault()](http://api.jquery.com/event.preventDefault/)を使用しないため(コードの使いやすさが向上します)、-1ではなく-3を指定することができません。ごめんなさい。 – Tadeck

+0

はい、あなたは正しいです。私はちょうど彼のHTMLコードを使用して新しい行を作成するための最小限のソリューションを提供しました。彼の新しく作成された要素から値を取得することは問題になりますが、彼が言及したように、INFINITE行を作成したいと思っているだけで、テストに興味があるようです。とにかく、あなたのコードは実用的な解決策です。ありがとう! –

関連する問題