向表单添加多个字段

Add multiple fields to form

本文关键字:字段 添加 表单      更新时间:2023-09-26

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

这是我的表单的样子:

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

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

.HTML

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

.CSS

ul {
  padding: 0;
  margin: 0;
}
ul li {
  list-style: none;
}

杰奎里

$(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>");
  });
});

这允许您在提交表单时将结果存储在数组中。由于您可以有 5 个姓名、电话和电子邮件,因此数组是解决此问题的最佳方式。然后在 PHP 中,您将$_POST['name'][0]作为第一个。

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

代码笔示例

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

尝试这样的事情:

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

输入字段包装在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);
}

你需要实现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>

到此为止!! :)

试试这个: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();
});

这就是我解决它的方式。

.HTML:

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

.JS:

$( document ).ready(function() {
    $("#addMoreFields").click(function(event) {
        event.preventDefault();
        $("#inputHolder").append('<input name="name" type="text" placeholder="Name"><br>');
        $("#inputHolder").append('<input name="phone" type="text" placeholder="Phone"><br>');
        $("#inputHolder").append('<input name="email" type="text" placeholder="E-Mail"><br><br>');
    });
});

https://jsfiddle.net/r71odb7t/

首先,您要克隆要添加的元素。在页面加载时执行此操作。然后单击该按钮时,克隆副本并将副本添加到页面。而且,您可以向按钮添加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>