2012-01-03 125 views
1

無法完全弄清楚這一點。在Firefox中(僅在Firefox中測試),此代碼創建8個輸入和8個按鈕。我認爲它應該只創建一個。需要一些幫助在這一個。Javascript創建了太多輸入元素

var replacefiles = function(){ 
    var inputs = document.getElementsByTagName('input'); 
    var length = inputs.length // prevent infinite loop 
    for (var x = 0; x < length; x++){ 
     var type = inputs[x].getAttribute('type'); 
     if (type === 'file'){ 
      var file = inputs[x]; 
      var parent = file.parentNode; 
      var input = document.createElement('input'); 
      var button = document.createElement('button'); 
      parent.insertBefore(input, file); 
      parent.insertBefore(button, file); 
     } 
    } 
} 
+0

沒有你的HTML複製結果到一個正常的數組,我們不能告訴。頁面上可能已經有8個了。 – 2012-01-03 18:30:18

+0

用輸入顯示周圍的html。 – Slavic 2012-01-03 18:30:46

+0

請顯示html – 2012-01-03 18:31:13

回答

3

getElementsByTagName返回結果的實時視圖。

當您在當前之前插入新的<input>時,電流會被切換,因此inputs[i + 1]現在指向相同的<input type="file">

你需要通過編寫

inputs = Array.prototype.slice.call(inputs); 
+0

就是這樣。謝謝。 – 2012-01-03 18:57:13