复杂表单 - 如何为每个新元素生成新的object_ids?

时间:2011-01-06 11:37:41

标签: javascript jquery ruby-on-rails ruby-on-rails-3 nested-forms

通过结合逻辑和缺乏JQuery / Javascript的经验,我发现自己遇到了这个问题。

背景 -
我正在使用复杂表单示例的Jquery-deep branch,它允许一个表单一次创建/编辑多个嵌套表的记录。部分原因是用户能够动态添加/删除新记录。示例:用户可以创建具有许多任务(级别B )的项目(级别A ),每个任务都有许多任务(级别C )。

Javascript补充 -
我已经构建了一个独立应用于每个任务的javascript函数。当用户从选择框中进行选择时,“true”的ID为"multiple_choice_" + f.object_id.to_s,函数会找到此内容并突出显示名为"true_" + f.object_id.to_s的div。

新元素没有新的object_id -
每次用户添加新记录时,它们都具有相同的object_id,这使得我的上述计划无用。我尝试将此object_id添加到rand(1000000000),但每次添加新任务时都是相同的。

我怎样才能(1)每次添加任务时都会生成新的object_ids /随机数,或者(2)为每个添加使用不同的唯一标识符进行不同的添加?


application.js中的Add_child代码:

$(function() {
  $('form a.add_child').live('click', function() {
    var assoc   = $(this).attr('data-association');
    var content = $('#' + assoc + '_fields_template').html();
    var regexp  = new RegExp('new_' + assoc, 'g');
    var new_id  = new Date().getTime();
    $(this).parent().before(content.replace(regexp, new_id));
    return false;
  });
});

澄清

问题不在于如何在上面的.js代码中生成随机数。问题是如何从新生成的代码中访问新的随机数,例如,形成html元素的ID。

1 个答案:

答案 0 :(得分:1)

只需使用全球计数器:

var _taskCount = 0;
$(function() {
  $('form a.add_child').live('click', function() {
    ...
    var new_id  = "Task_" + _taskCount;
    _taskCount++;
    ...
  });
});