PHP表单:一对多UI关系,用Javascript/jQuery表示



我有一个简单的问题,但由于某种原因,我无法找到解决方案(或者我相信有很多)。我正在为用户构建一个简单的PHP表单,用户可能有零到无限的电话号码和一到无限的电子邮件地址。

我想要一个PHP页面,它允许我点击"添加新电话号码"之类的按钮,然后弹出另一个电话号码字段。每个字段旁边都应该有一个删除图标,用于删除该行。当我提交表单时,我希望能够用PHP处理它,最好是用一种简单的方式。

问题是,我正在手动逐行编写jQuery,并试图构建一个框架来实现它,这样我就可以很容易地将其应用于其他领域。然后我意识到它一定已经完成了,我正在重新发明轮子。

有人知道有什么简单的一对多工具可以让我重新发明轮子吗?

UPDATE原来我应该搜索"表单元素中继器"或"表单输入克隆"或类似短语,而不是"jquery一对多输入"。这些新短语产生了我接受的(我自己的)答案中的结果。

两个框架:

SheepIt:http://www.mdelrosso.com/sheepit/index.php?lng=en_GB&sec=主

jQuery Form元素转发器插件:https://github.com/cballou/jQuery-Form-Element-Repeater-Plugin

$('.add-input').click(function(){
var  num =  $(this).attr('data-num'),
$newInput = $('<input data-input="' + num + '" type="tel"/>'),
$delete = $('<a class='delete'/>');
$delete.on('click', function(ev){
$newInput.remove();
});
$('#formName').append($newInput + $delete);
}) ;

类似这样的东西应该很好用。它生成一个输入和删除按钮,在生成的删除按钮上附加一个点击事件,并使用数据属性,以便您可以通过PHP跟踪输入。

您的html代码应该看起来像这个<input name="phonenumber[]">

你的jquery代码看起来像这个

$('#add_phonenumber').click(function(){
$('#my_form').append('<input name="phonenumber[]">'); //add 
});
$('.delete_me').click(function(){
$(this).closest('span or div').find('input').remove(); // delete (NOTE: your delete button and an input must be in one container for each input)
});
<span class="inputs"><input type="text" name="phonenumber[]"><a class="delete_me">delete this input</a></span>

您的php表单处理程序

$new = array();
$phones = $_POST['phonenumber'];
$count = count( $phones );
for ( $i = 0; $i < $count; $i++ ) {
if ( $phones[$i] != '' ) :
$new[$i]['phonenumber'] = stripslashes( strip_tags( $phones[$i] ) );
endif;
}
// now array $new contains your phone numbers, you can save it or whatever you want to do with it

作为一个简单的替代方案,您可以有一个输入框,并用分号或其他标记分隔多个条目。然后在php脚本中,可以使用explode函数将它们分离成一个数组。例如:

johndoe@gahoo.com; janedoe@gahoo.com;jamesdoe@gahoo.com;

这将允许剪切和粘贴例如电子邮件地址串,因此对于某些应用程序来说,这可能是一个更好的解决方案,并且需要最少的编码

最新更新