2013-03-11 65 views
2

我遇到問題了。當我觸發此代碼:IE 10中的Javascript很慢

function addItem(){ 
     var select = document.getElementById("2"); 
     select.options.length = 0;; 
     alert("Please wait..."); 
     for (var i = 0; i < array.length; i++) { 
      select.options[select.options.length] = new Option(array[i]); 
     } 
     alert("Images loaded!"); 
    } 

在Internet Explorer 10(在Windows 8上)它響應非常緩慢。陣列中平均有35000個項目,但Chrome和Firefox沒有這個問題......我能做些什麼才能在IE中更加流暢?因爲這是一個普通的瀏覽器...

+1

您是否嘗試過刪除'警報(「請稍候...」);'? – 2013-03-11 13:18:40

+2

選擇框中的35000項?來吧..你在慢速系統上殺人,再加上你在浪費帶寬。使用一些自動完成小部件,或修改選擇框,如http://harvesthq.github.com/chosen/ – WTK 2013-03-11 13:19:00

+0

是的,我已經嘗試過邁克爾,但沒有成功......和WTK,其列表框(多個)與圖像名稱在它的攝像頭安全系統 – 2013-03-11 13:20:05

回答

6

除了對項目的傻數量,試試這個

請注意,IE不允許我們改變選擇的innerHTML所以我改變容器的innerHTML選擇必須住在這工作

function addItem(){ 
    var select = document.getElementById("2"); // Why a numeric ID? 
    var parent = select.parentNode; 
    parent.innerHTML="Please wait"; 
    var html='<select id="2" multiple="multiple">'; 
    for (var i=0,n=array.length, i<n; i++) { 
    html += '<option value="'+array[i]+'">'+array[i]+'</option>'; 
    } 
    html += '</select>' 
    parent.innerHTML=html; 
    alert("Images loaded!"); 
} 

或者看createDocumentFragment和使用appendChild

+0

嘿謝謝你,它的工作! – 2013-03-11 13:29:10

+0

一句話的解釋 - 訣竅是推遲實際插入新選項到DOM的時刻,以節省迴流和重新繪製。 – WTK 2013-03-11 13:45:33