0

我有一个国家选择菜单(我无法更改此服务器端)。根据先前的用户选择,已经选择了其中一个选项。

我还有一个国家代码列表(也生成服务器端),它指定了应该出现在菜单中的国家。(大部分应该被删除。)

我想出了以下脚本,但不明白为什么它不起作用。我可以禁用不需要的国家

  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>
4

2 回答 2

0

remove是一个函数。它用常规括号调用。

countrymenu.remove(i);

remove[i]尝试将函数用作数组。这失败了,所以什么也没有发生。它也可能导致停止代码的错误。

于 2013-11-15T11:11:26.140 回答
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();

这应该只留下:

  • 美属萨摩亚
  • 安圭拉
于 2013-11-15T11:19:05.130 回答