使用jQuery动态添加行

Ali*_*xel 60 html javascript forms jquery

我正在构建一个我需要多个可选输入的表单,我所拥有的基本上是这样的:

形式示例http://i49.tinypic.com/fcscyh.png

每次用户按下加号按钮时,都应该在表单中添加一行新的表单输入,如何在jQuery中执行此操作?此外,当所有行(或者只是最后一行,如果它更容易/更快)被填充时,是否可以自动添加新行这样用户就不需要按加号按钮了.

我很抱歉可能会问这样一个基本的问题,但我对jQuery仍然非常环保,我可以用PHP做到这一点,但我确信Javascript/jQuery在这里扮演一个更合适的角色.

提前致谢!


@alex:

<!DOCTYPE html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<script type="text/javascript">
$form = $('#personas');
$rows = $form.find('.person');

$('a#add').click(function() {
    $rows.find(':first').clone().insertAfter($rows.find(':last'));
    $justInserted = $rows.find(':last');
    $justInserted.hide();
    $justInserted.find('input').val(''); // it may copy values from first one
    $justInserted.slideDown(500);
});
</script>
</head>

<body>
<form id="personas" name="personas" method="post" action="">
  <table width="300" border="1" cellspacing="0" cellpadding="2">
    <tr>
      <td>Name</td>
      <td>More?</td>
    </tr>
    <tr class="person">
      <td><input type="text" name="name[]" id="name[]" /></td>
      <td><a href="#" id="add">+</a></td>
    </tr>
  </table>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Rip*_*ppo 60

这会让你关闭,添加按钮已从表中删除,所以你可能想要考虑这个...

<script type="text/javascript">
    $(document).ready(function() {
        $("#add").click(function() {
          $('#mytable tbody>tr:last').clone(true).insertAfter('#mytable tbody>tr:last');
          return false;
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

HTML标记看起来像这样

  <a  id="add">+</a></td>
  <table id="mytable" width="300" border="1" cellspacing="0" cellpadding="2">
  <tbody>
    <tr>
      <td>Name</td>
    </tr>
    <tr class="person">
      <td><input type="text" name="name" id="name" /></td>
    </tr>
    </tbody>
  </table>
Run Code Online (Sandbox Code Playgroud)

编辑在插入后清空文本框的值.

    $('#mytable tbody>tr:last').clone(true).insertAfter('#mytable tbody>tr:last');
    $('#mytable tbody>tr:last #name').val('');
    return false;
Run Code Online (Sandbox Code Playgroud)

EDIT2无法帮助自己,要重置插入的TR中的所有下拉列表,您可以执行此操作

$("#mytable tbody>tr:last").each(function() {this.reset();});           
Run Code Online (Sandbox Code Playgroud)

我会把剩下的留给你!


jav*_*irl 6

作为上述答案的补充:您可能需要更改输入元素的名称/ ID中的ID(请注意,您不应在字段名称中包含数字):

<input name="someStuff.entry[2].fieldOne" id="someStuff_fdf_fieldOne_2" ..>
Run Code Online (Sandbox Code Playgroud)

我已经这样做了一些全局变量默认设置为0:

var globalNewIndex = 0;
Run Code Online (Sandbox Code Playgroud)

在克隆并重置新行中的值后,在add函数中:

                var newIndex = globalNewIndex+1;
                var changeIds = function(i, val) {
                    return val.replace(globalNewIndex,newIndex);
                }
                $('#mytable tbody>tr:last input').attr('name', changeIds ).attr('id', changeIds );
                globalNewIndex++;
Run Code Online (Sandbox Code Playgroud)