2012-07-16 89 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 
});