2011-11-05 57 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为:

<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。此外,请保持一致,最好对于HTML属性使用"(双引号),对于JavaScript字符串使用'(单引号)。

其次,做这样的事情:

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

    }); 
}); 

这将添加行到表每次点击上课add-author(只是要确保没有其他链接influented)的链接,增加数量在每个插入字段名称的名称末尾加1.该行将插入表authors-list(与链接类相同的原因)的表末尾。请参阅this jsfiddle作为证明。

+0

我尽可能多地使用单引号,因为它是我写的所有代码中的一个较少的击键,但是如果您愿意给我一个特定的原因,为什么我应该使用双引号和单引号,我很想改变我的编码偏好。我对编程界还是一个新手(只在全职学习了8个月的php),并且很乐意接受任何好的建议。 –

+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库在你的页面中。

$(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。这将使他们成为全球性的污染全球名称空间。第二个原因是关于HTML中的引号不一致。第三个原因不会使用[event.preventDefault()](http://api.jquery.com/event.preventDefault/)(这会提高代码的可用性),但我无法给-3而不是-1。抱歉。 – Tadeck

+0

是的你是对的。我只是提供了使用他的html代码创建新行的最小解决方案。从他新创建的元素中获得值是个问题,但是正如他所提到的,他希望创建INFINITE行,它似乎只对测试感兴趣。无论如何,你的代码是一个实用的解决方案。谢谢 ! –

相关问题