2011-11-02 52 views
0

你可以看到任何在FF和Safari中都可以正常工作的原因,但是在IE9中運行時它會完全展現出來嗎?它需要永遠,幾乎掛起瀏覽器。謝謝!JS功能在FF和Safari中效果很好,但在IE9中需要很長時間

這是一個按鍵後刷新列表的函數。該函數清除列表,然後通過全局定義的數組進行線性搜索並將匹配添加回列表。

function handleKeyUp() 
{ 
    var selectObj, textObj, componentListLength; 
    var i, searchPattern, numShown; 

    // Set references to the form elements 
    selectObj = document.form1.componentselect; 
    textObj = document.form1.componentinput; 

    // Remember the function list length for loop speedup 
    componentListLength = componentlist.length; 

    // Set the search pattern depending 
    if(document.form1.componentradio[0].checked == true) 
    { 
     searchPattern = "^"+textObj.value; 
    } 
    else 
    { 
     searchPattern = textObj.value; 
    } 

    // Create a regular expression 
    re = new RegExp(searchPattern,"gi"); 
    // Clear the options list 
    selectObj.length = 0; 

    // Loop through the array and re-add matching options 
    numShown = 0; 
    for(i = 0; i < componentListLength; i++) 
    { 
     if(componentlist[i].search(re) != -1) 
     { 
      selectObj[numShown] = new Option(componentlist[i],""); 
      numShown++; 
     } 
    } 
} 
+1

你能在腳本調試通過它一步,並試圖弄清楚發生了什麼要花這麼長時間?另外,componentListLength的價值是什麼?你正在處理一些巨大的清單嗎? –

+0

有多少種選擇? –

+0

列表中大約有6500個項目。 – user1026110

回答

0

兩件事情,看起來腥對我說:

// Clear the options list 
selectObj.length = 0; 
// should be 
selectObj.options.length = 0; 


// Next thing, adding them back 
selectObj[numShown] = new Option(componentlist[i],""); 
// should be 
selectObj.options[numShown] = new Option(componentlist[i],""); 
相關問題