我会尽可能地在逻辑上解释这个问题。基本上我在我的网站上有一个设施,用户可以输入他们的工作经历。这是一个带有输入字段的表单。为了方便起见,我有一个jQuery函数来克隆这些输入字段,并允许用户一次输入多个记录。
在添加新记录时,用户可能希望从列表中删除记录,在这种情况下,他们可以按“删除”记录。链接到每条记录旁边。
HTML(1项):
<div class="history-form-fields">
<div class="row">
<label for="History_0_type">Type</label>
<select name="History[0][type]" id="History_0_type">
<option value="">Select</option>
</select>
</div>
<div class="row">
<label for="History_0_name">Name</label>
<input type="text" name="History[0][name]" id="History_0_name" />
</div>
<div class="row">
<label for="History_0_year">Year</label>
<select name="History[0][year]" id="History_0_year">
<option value="">Select</option>
</select>
</div>
</div>
<input id="add" type="button" value="Add Another" />
JS:
<script type="text/javascript">
var counter = <?php echo $historyCount; ?>;
$('#add').click(function(){
var divCloned = $('.history-form-fields:first').clone();
divCloned.insertAfter('.history-form-fields:last');
initNewInputs(divCloned.children('.row'), ++counter);
});
$('.remove').live('click', function(){
$(this).parent().remove();
return false;
});
</script>
在上面的JS代码中,$historyCount
变量预先在我的PHP脚本中设置:
$historyCount=isset($_POST['History']) ? count($_POST['History'])-1 : 0;
因此,例如,当发布表单时,如果页面上有多个记录并且存在一些验证错误,则表单将重新显示,显示相同的记录。
还有一个函数initNewInputs()
的调用,它在新函数中传递
反价值。这样新的表单输入元素可以接收唯一的ID和NAME属性(在上面的HTML代码中,您可以看到属性值中的整数索引)。
这一切都很好。我遇到的问题出现在以下情况中:
用户开始添加新记录
用户删除唱片3&amp; 4(所以我们现在只有3条记录)。记录5现在是记录3但保持相同的计数值(4)。
然后用户添加一条新记录:
用户发布表单 - 存在一些验证错误,因此表单会重新显示。 PHP脚本确定它收到4条记录,因此它将计数预先设置为3。
用户决定在修复错误时添加新记录
这就是出现问题的地方 - 页面上已存在计数值为4的记录。即它现在已经创建了具有与页面上已有的ID和NAME属性值相同的输入元素。
我知道这有点难以理解但我会感激任何帮助。它很可能需要修改计数器的设置方式。
答案 0 :(得分:1)
而不是使用count($_POST['History'])
来填充counter
而不是使用$_POST['History']
数组的上限(在本例中,我的意思是最高索引号)。