2012-07-16 91 views
0

我有一个jquery/javascript函数,可以创建一个数组,放置在窗体的隐藏字段中。但是,这是一种嵌套形式,所以我需要多次调用此函数来填充所有子项的隐藏字段:test_suite_run[test_runs_attributes][//id][packages_id]。这意味着我需要每次使用不同的子ID来运行此函数。复制JQuery/Javascript功能

我已经加了//id来表示许多函数调用之间的唯一区别。我不知道如何复制这个函数,而不需要手动复制它多次,并替换每个嵌套子实例的索引为0 ... n的// id。这可以通过传递参数到javascript函数来完成吗?

对不起,如果这有点令人困惑,我会很乐意解释如果需要更详细的。

jQuery函数

$(document).ready(function() { 

    arr = new Array(); 

    $(document).on('change', 'select[id ^="s_package//id"]', function() { 
     var arr = $('select[id ^="s_package//id"]').map(function() { 
      return this.value 
     }) 

     result = "" 

     for (j = 0; j < arr.length - 1; j++) { 
      result += (arr[j] + ", "); 
     } 

     result += (arr[arr.length - 1]) 


     $("input[name='test_suite_run[test_runs_attributes][//id][packages_id]']").val(result); 

    }); 
}); 
+0

取而代之的是使用基于id的选择器。我会说使用选择器作为类,因为你正在使用的on()函数会自动将change事件和函数绑定到将来用这个类创建的所有元素,这样你就不必再次重复这个函数。 http://api.jquery.com/delegate/ $(document).on('change','.some_class',function() – Raghu 2012-07-16 19:33:08

回答

0

您可以通过一组ID在你的功能使用和重复它们:

function somethingMeaningful(ids) { 
    for (var i = 0, l = ids.length; i < l; i++) { 
     var id = ids[i]; 
     // do something with this id 
    } 
} 

$(function() { 
    somethingMeaningful(['id1', 'id2', 'idn']); 
}); 

这或许还可以简化您的选择,并计算ID在运行时间取决于它们的实际格式:

$(document).on('change', 'select[id^="s_package"]', function() { 
    var id = $(this).attr('id').slice('s_package'.length); 
    // Do stuff with real id 
});