2017-01-27 30 views
0

我正在嘗試創建「動態」級聯dropboxes,並且我幾乎完成了它。然而,我遇到了一個問題,處理將一個.change()偵聽器添加到包含<select>字段標識的數組內部的每個變量中。將.change()添加到js Array()中的每個變量;

所以,如果我使用:

fields[0].change(function() {populateFields(1, 0, xml);}); 
fields[1].change(function() {populateFields(2, 1, xml);}); 

代碼工作完美。不過,我更願意用這樣的:

for (i=1; i<numberOfFields; i++){ 
      p = i-1; current = i; 
      fields[p].change(function() {populateFields(current, p, xml);}); 
     } 

所以,我可以有一個可變的多個字段,因爲當前的代碼僅限於三個字段。 for循環當前有效,但在輸入第二個字段後不起作用。

任何幫助,將不勝感激。

注意:這不是一個關於變量或將變量傳入函數的問題,而是將一個事件偵聽器添加到數組中。明顯的答案是正確的答案。

+0

我應該提到的原因,我開始了1上的循環是因爲0索引具有不同的編程並在別處處理。所以這是用於字段[1] =模型,並且字段[2] =年份 – Blaise

+0

是否僅用於索引1和2? – hackerrdave

+0

如果你從i = 1開始,那麼'if'條件永遠不會被擊中,因此不需要 – hackerrdave

回答

1

您可以使用Array.prototype.forEach(),並在您在傳遞函數可以把一個後衛,你正在處理的第一個元素的情況:

fields.forEach(attachChangeHandler); 

function attachChangeHandler(field, i) { 
    if (i === 0) { return; } 
    field.change(function() { 
    populateFields(i + 1, i, xml); 
    }); 
} 
+0

看起來很有希望。如何在attachChangeHandler函數中定義字段? – Blaise

+1

@Blaisen'forEach'將調用數組中每個元素的函數,並傳入參數。重複的問題有更多的信息。 – 4castle

+0

傳遞給'forEach'的函數將具有數組,索引,數組的元素。所以在這種情況下,該字段表示數組中的每個迭代元素 – hackerrdave