向表单添加多个字段
Add multiple fields to form
我想添加一个在我的表单中生成多个字段的函数。
这是我的表单的样子:
<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> </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>
- 使用单个文本框向多个字段添加严格搜索
- WooCommerce-根据自定义字段添加费用
- 向使用jQuery加载DOM后添加的字段添加不受限制的文本输入DatePickers
- j查询检查复选框是否被选中,然后向输入字段添加值
- 使用 javascript 将各种输入字段添加到一起
- 使用 jQuery 将字段添加到表中的 HTML 表单中
- 如何从动态输入字段添加数字
- Extjs 3.3动态地将字段添加到表单中,并设置它们的标签宽度
- JQuery:如何检查复选框是否被选中并向字段添加属性
- "未捕获的类型错误:未定义的不是函数“;当向输入字段添加值时
- Bootstrap typeahead为隐藏字段添加值
- 使用chrome扩展(HTML、CSS、JavaScript)向输入字段添加可点击的图标/按钮
- 正在向输入字段添加自定义验证
- 使用javascript向输入字段添加值
- 如何将自定义字段添加到Json结果-ASP.NET MVC
- 向选定的弹出字段添加逗号
- Accounts.onCreateUser 未将字段添加到 Meteor 的用户集合中
- 如何将自定义字段添加到 dhtmlxScheduler
- 根据 JavaScript 中的选中复选框将字段添加到页面
- 如何从开始日期中的单独字段添加天数/周,以在日期选择器中获取结束日期