2013-11-15 104 views
0

我有個國家的選擇菜單(我不能改變這個服務器端)。它的一個選項已經被選中,根據以前的用戶選擇。刪除匹配從選擇菜單選項用JavaScript

我也有一個國家代碼列表(也生成服務器端),它指定應出現在菜單中的國家。 (大多數應該被刪除。)

我想出了下面的腳本,並且看不出爲什麼它不起作用。我可以

countrymenu.options[i].disabled = true; 

countrymenu.remove[i]; 

禁用不需要的國家(這是我所需要的),什麼都不做。

任何幫助,將不勝感激。

<html> 
    <head> 
     <script type="text/javascript"> 
      function HideCountries() 
      { 
       countrymenu = document.checkoutform.country_code; 

       for (var i = 0; i < countrymenu.length; i++) 
       { 
        if (/^ASM|AIA$/.test(countrymenu.options[i].value)==false) 
        { 
         countrymenu.remove[i]; 
        } 
       } 
      } 

      window.onload=HideCountries; 
     </script> 
    </head> 
    <body> 
     <form name="checkoutform"> 
      <select name="country_code" id="country_code"> 
       <option value="AFG">Afghanistan</option> 
       <option value="ALA">&Aring;land Is.</option> 
       <option value="ALB">Albania</option> 
       <option value="DZA">Algeria</option> 
       <option value="ASM">American Samoa</option> 
       <option value="AND">Andorra</option> 
       <option value="AGO">Angola</option> 
       <option value="AIA">Anguilla</option> 
       <option value="ATA" selected="selected">Antarctica</option> 
      </select>  
      <input type="submit" /> 
     </form> 
    </body> 
</html> 

回答

0

雖然您的remove()功能不正確,但您也應該以相反的順序移除項目,因爲一旦項目被移除,索引就會移位。

http://jsfiddle.net/MrPolywhirl/gPY3p/

function hideCountries() { 
    countrymenu = document.getElementsByName('country_code')[0] 
    for (var i = countrymenu.length-1; i >= 0; i--) { 
     if (/^ASM|AIA$/.test(countrymenu.options[i].value) == false) { 
      countrymenu.remove(i); 
     } 
    } 
} 

window.onload = hideCountries(); 

這應該只留下:

  • 美屬薩摩亞
  • 安圭拉
0

remove是函數。這就是所謂的定期括號。

countrymenu.remove(i); 

remove[i]試圖將該函數用作數組。這種失敗,所以什麼也沒發生。此外,它可能會導致停止代碼中的錯誤。