添加多个字段以形成

时间:2015-12-30 16:02:09

标签: javascript jquery html forms

我想添加一个为我的表单生成多个字段的函数。

这就是我的表单的样子:

<form action="form_sent.php" method="post">
    <input name="name" type="text" placeholder="Name"><br>
   <input name="phone" type="text" placeholder="Phone"><br>
   <input name="email" type="text" placeholder="E-Mail"><br><br>
   <button>Add more fields</button><br><br>
   <input type="submit">   
</form>

在我的情况下,当点击“添加更多字段”时,我想要3个新字段(姓名,电话,电子邮件)。

我该怎么做?

https://jsfiddle.net/374cxt5s/

8 个答案:

答案 0 :(得分:5)

试试这个:https://jsfiddle.net/Twisty/q8zj00s0/1/

<强> HTML

$rev = Revision::find(42);

foreach ($rev->children as $child) {
    // display the child content
    echo $child->content;

    // display the grandchildren's content
    foreach ($child->children as $grandchild) {
        echo $grandchild->content;
    }
}

<强> CSS

<form action="form_sent.php" method="post">
  <ul id="fieldList">
    <li>
      <input name="name[]" type="text" placeholder="Name" />
    </li>
    <li>
      <input name="phone[]" type="text" placeholder="Phone" />
    </li>
    <li>
      <input name="email[]" type="text" placeholder="E-Mail">
    </li>
  </ul>
  <button id="addMore">Add more fields</button>
  <br>
  <br>
  <input type="submit">
</form>

<强> JQuery的

ul {
  padding: 0;
  margin: 0;
}

ul li {
  list-style: none;
}

这允许您在提交表单时将结果存储在数组中。由于您可以拥有5个姓名,电话和电子邮件,因此数组是解决此问题的最佳方式。然后在PHP中,您将$(function() { $("#addMore").click(function(e) { e.preventDefault(); $("#fieldList").append("<li>&nbsp;</li>"); $("#fieldList").append("<li><input type='text' name='name[]' placeholder='Name' /></li>"); $("#fieldList").append("<li><input type='text' name='phone[]' placeholder='Phone' /></li>"); $("#fieldList").append("<li><input type='text' name='email[]' placeholder='E-Mail' /></li>"); }); }); 作为第一个。

答案 1 :(得分:2)

我假设您可能想要创建一个动态表单,允许您添加多个联系人等。

CodePen示例

http://codepen.io/anon/pen/yeVRgw

基本HTML设置

这样你就可以遍历事物了,为了你自己的理智,你可能想要分割出表单中的每个块。我们还将设置隐藏输入以跟踪已创建name,phone,email的分区数。我们默认为1

<form action="form_sent.php" method="POST">
    <input type="hidden" name="contacts" id="contacts" value="1">

    <div class="form-contacts-container">

        <div class="form-contact" id="form-contact-1">
            <input type="text" name="name-1" id="name-1" placeholder="Name">
            <input type="text" name="email-1" id="email-1" placeholder="E-mail">
            <input type="text" name="phone-1" id="phone-1" placeholder="Phone">
        </div>

        <!-- We'll be adding additional inputs here -->

    </div>

    <div class="form-contacts-add">
        <input type="button" value="Add More Fields" id="add-fields">
    </div>

    <div class="form-contacts-submit">
        <input type="submit" name="submit" id="submit" value="Submit">
    </div>

</form>

JavaScript

这假设您使用的是jQuery,因此请确保它位于<head>

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

现在我们需要做一些事情 - 首先,将事件监听器附加到button,然后在表单中添加包含字段的新<div class="form-contact">。我们还需要确保我们正在计算以确保每个部分都具有唯一的名称/ ID,并且我们将增加隐藏的输入值以计算总共添加了多少联系人。

<script type="text/javascript">
    var total = 1; // Our default for how many contacts we have


    $( document ).on( 'click', '#add-fields', function() {

        var addBlockId = total = total + 1;

        var addBlock = document.createElement('div');
        $(addBlock).addClass('form-contact');
        $(addBlock).attr('id','form-contact-' + addBlockId);

        var inputName = document.createElement('input');
        $(inputName).attr('type','text');
        $(inputName).attr('name','name-' + addBlockId);
        $(inputName).attr('id','name-' + addBlockId);
        $(inputName).attr('placeholder','Name');
        $(inputName).appendTo($(addBlock));

        var inputEmail = document.createElement('input');
        $(inputEmail).attr('type','text');
        $(inputEmail).attr('name','email-' + addBlockId);
        $(inputEmail).attr('id','email-' + addBlockId);
        $(inputEmail).attr('placeholder','E-mail');
        $(inputEmail).appendTo($(addBlock));

        var inputPhone = document.createElement('input');
        $(inputPhone).attr('type','text');
        $(inputPhone).attr('name','phone-' + addBlockId);
        $(inputPhone).attr('id','phone-' + addBlockId);
        $(inputPhone).attr('placeholder','Phone');
        $(inputPhone).appendTo($(addBlock));

        $(addBlock).appendTo($('.form-contacts-container'));
        $('#contacts').val(total);

    });

</script>

处理表格

最后一个难题是正确处理你的表格。不要在这里给你所有的答案,但基本的逻辑是获取我们已更新的$_POST['contacts']值并运行循环以获取所有输入和相关值。例如在PHP

$total = $_POST['contacts'];
$contacts = array();

for( $i = 1; $i < $total; $i++ ) {
    $this_contact = $array(
        'Name'  => $_POST['name-' . $i],
        'Email' => $_POST['email-' . $i],
        'Phone' => $_POST['phone-' . $i]
    );
    array_push($contacts, $this_contact);
}

var_dump( $contacts );

答案 2 :(得分:1)

您需要实现jQuery来更改HTML DOM。

因此,您可以在<head></head>标记中添加:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

您需要像这样修改HTML:

<form action="form_sent.php" method="post">
<input name="name" type="text" placeholder="Name"><br>
<input name="phone" type="text" placeholder="Phone"><br>
<input name="email" type="text" placeholder="E-Mail"><br><br>
<button extra="0">Add more fields</button><br><br>
<input type="submit">
</form>

然后你需要使用这个jQuery代码:

<script>
$("button").on("click",function(){
var extra = $(this).attr("extra") + 1;
$("form").append("<input type='text' placeholder='Other Field' name='field' />");
$(this).attr("extra",extra);
}
</script>

这是结束!! :)

答案 3 :(得分:1)

将输入字段包装在div中可能并不是一个坏主意,因为当您追加连续出现的其他输入时。在你的html中试试这样的东西

<form action="form_sent.php" method="post">
 <div id="fields">
   <input name="name" type="text" placeholder="Name"><br>
 <input name="phone" type="text" placeholder="Phone"><br>
 <input name="email" type="text" placeholder="E-Mail"><br><br>
 </div>
 <button>Add more fields</button><br><br>
 <input type="submit">   
</form>

然后你的javascript可以这样完成

$(function() {  
$('button').click(function() { addFields(); });
});

function addFields() {
var html = "<input name='name' type='text' placeholder='Name'><br>
 <input name='phone' type='text' placeholder='Phone'><br>
 <input name='email' type='text' placeholder='E-Mail'><br><br>";

 $('#fields').append(html);
}

答案 4 :(得分:1)

尝试这样的事情:

(function() {
   var button=document.getElementById("add-user");
   button.addEventListener('click', function(event) {
      event.preventDefault();
      var cln = document.getElementsByClassName("user")[0].cloneNode(true);
      document.getElementById("users").insertBefore(cln,this);
      return false;
   });
})();
<form id="users" action="form_sent.php" method="post">
 <div class="user">
   <input name="name" type="text" placeholder="Name"><br>
   <input name="phone" type="text" placeholder="Phone"><br>
   <input name="email" type="text" placeholder="E-Mail"><br><br>
 </div>
   <button id='add-user'>Add more fields</button><br><br>
   <input type="submit">   
</form>
https://jsfiddle.net/9955n4fo/

答案 5 :(得分:0)

试试这个: Jquery append()函数似乎可以理清你的答案 HTML代码应如下所示:

<form action="form_sent.php" method="post">
   <div class = 'xyz'>
   <input name="name" type="text" placeholder="Name"><br>
   <input name="phone" type="text" placeholder="Phone"><br>
   <input name="email" type="text" placeholder="E-Mail"><br><br>
   </div>
   <button>Add more fields</button><br><br>
   <input type="submit">   
</form>

JS 应该如下:

$(button).click(function(event){
$('.xyz').append("<input type ='text' class ='name' placeholder = 'Enter name'/><br/>");
$('.xyz').append("<input type='text' class='phone' placeholder='Enter phone'/><br/>");
$('.xyz').append("<input type='mail' class='phone' placeholder='Enter e-mail'/><br/>");
event.preventDefault();
});

答案 6 :(得分:0)

这就是我解决它的方法。

HTML:

<ul>
    <li class="homeicon">
        <a href="http://www.blankesque.com"><!-- img --></a>
    </li>

    <li><a href="http://www.blankesque.com/p/aboutblankesque.html">About</a></li>
      <!-- the rest of your li's -->
</ul>

JS:

<form action="form_sent.php" method="post">
   <div id="inputHolder">
     <input name="name" type="text" placeholder="Name"><br>
     <input name="phone" type="text" placeholder="Phone"><br>
     <input name="email" type="text" placeholder="E-Mail"><br><br>
   </div>

   <button id="addMoreFields">Add more fields</button><br><br>
   <input type="submit">   
</form>

https://jsfiddle.net/r71odb7t/

答案 7 :(得分:0)

首先,您要克隆要添加的元素。页面加载时执行此操作。然后,单击该按钮时,克隆该副本并将副本添加到该页面。而且,您可以在按钮上添加type="button"或使用e.preventDefault(),这样在点击按钮时您的表单就不会被提交。

$(function() {
    var inputs = $('form > button').prev().prev().prevUntil().clone().add('<br><br>');
    $('form > button').on('click', function(e) {
  	  e.preventDefault();
  	  $(this).before(inputs.clone());
    });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="form_sent.php" method="post">
    <input name="name" type="text" placeholder="Name"><br>
   <input name="phone" type="text" placeholder="Phone"><br>
   <input name="email" type="text" placeholder="E-Mail"><br><br>
   <button>Add more fields</button><br><br>
   <input type="submit">   
</form>