调整JavaScript计数

时间:2011-01-05 18:25:14

标签: php jquery

我会尽可能地在逻辑上解释这个问题。基本上我在我的网站上有一个设施,用户可以输入他们的工作经历。这是一个带有输入字段的表单。为了方便起见,我有一个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代码中,您可以看到属性值中的整数索引)。

这一切都很好。我遇到的问题出现在以下情况中:

  1. 用户开始添加新记录

    • 记录1 - 计数0
    • 记录2 - 计数1
    • 记录3 - 计数2
    • 记录4 - 计数3
    • 记录5 - 计数4

  2. 用户删除唱片3&amp; 4(所以我们现在只有3条记录)。记录5现在是记录3但保持相同的计数值(4)。

  3. 然后用户添加一条新记录:

    • 记录4 - 计数5

  4. 用户发布表单 - 存在一些验证错误,因此表单会重新显示。 PHP脚本确定它收到4条记录,因此它将计数预先设置为3。

  5. 用户决定在修复错误时添加新记录

    • 记录5 - 计数4
  6. 这就是出现问题的地方 - 页面上已存在计数值为4的记录。即它现在已经创建了具有与页面上已有的ID和NAME属性值相同的输入元素。

    我知道这有点难以理解但我会感激任何帮助。它很可能需要修改计数器的设置方式。

1 个答案:

答案 0 :(得分:1)

而不是使用count($_POST['History'])来填充counter而不是使用$_POST['History']数组的上限(在本例中,我的意思是最高索引号)。