我会尽我所能地尽力在逻辑上解释这一点。基本上我在我的网站上有一个设施,用户可以输入他们的工作经历。这是一个带有输入字段的表单。为了让事情变得更容易,我有一个jQuery函数来克隆这些输入字段,并允许用户一次输入多个记录。调整JavaScript计数
在添加新记录时,用户可能希望从列表中删除记录,在这种情况下,他们可以按下每条记录旁边的“删除”链接。
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代码中,您可以看到属性值中的整数索引)。
这一切工作正常。我遇到的问题是在以下情形:
用户开始添加新记录
- 记录1 - 数0
- 记录2 - 计数1个
- 记录3 - 计数2
- 记录4 - 计数3
- 记录5 - 计数4
用户删除记录3 & 4(所以我们现在只有3条记录)。记录5现在是记录3,但保持相同的计数值(4)。
用户则增加了一个新的记录:
- 记录4 - 计数5
- 记录4 - 计数5
用户帖子的形式 - 有一些验证错误,这样的形式重新显示。 PHP脚本确定它收到4条记录,所以它预先将计数设置为3。
用户决定添加一个新的记录,而修复这些错误
- 记录5 - 共4
这是哪里的问题出现了 - 一个纪录的计数值4已经存在于页面上。即它现在已经创建了与页面上已有的ID和NAME属性值相同的输入元素。
我知道这有点难以理解,但我会很感激任何帮助。这很可能需要修改计数器的设置。
嗯好主意。让我一起去,我会尽快回复。 – GSTAR 2011-01-05 18:40:16
是的,这似乎已经成功了。我会继续测试,如果一切OK将会接受你的答案!谢谢。 – GSTAR 2011-01-05 18:49:43
听起来不错。不要忘了给我一个努力:) – webbiedave 2011-01-05 18:54:26