Javascript Dojo js工具包:动态填充选择的问题

Javascript Dojo js工具包:动态填充选择的问题,javascript,html,select,dynamic,dojo,Javascript,Html,Select,Dynamic,Dojo,我对dijit.form.Select项有一些问题 在一个页面中,我有两个项目:一个是在加载html页面时填充的,另一个是根据用户在第一个页面上选择的选项填充的 下面是我现在所说的示例,我保持代码的简单性,但在实际版本中,我在head部分包含了所有必要的dojo模块和库: <html> <head> <script type="text/javascript">

我对dijit.form.Select项有一些问题

在一个页面中,我有两个项目:一个是在加载html页面时填充的,另一个是根据用户在第一个页面上选择的选项填充的

下面是我现在所说的示例,我保持代码的简单性,但在实际版本中,我在head部分包含了所有必要的dojo模块和库:

<html> 
        <head> 
                <script type="text/javascript"> 
                        function updateB(val){ 

                                var menu = dojo.byId("selB"); 

                                menu.options.lenght=0; 

                                if(val=="aaa") 
                                        menu.addOption({value: "aa", label: "aa"}); 
                                else 
                                        menu.addOption({value: "bb", label: "bb"}); 
                        } 
                </script> 
        </head> 

        <body> 
                <select id="selA" name="selA" dojoType="dijit.form.Select" style="width: 180px;" onchange="updateB(this.get('value'));"></select> 

                <select id="selB" name="selB" dojoType="dijit.form.Select" style="width: 180px; "></select> 

                <script type="text/javascript"> 
                        var menu = dojo.byId("selA"); 

                        menu.addOption({value: "aaa", label: "aaa"},{value: "bbb", label: "bbb"}); 

                </script> 

        </body> 

</html>
当我在浏览器中加载页面时,菜单selA包含选项aaa和bbb。但selB,当我在selA中选择aaa或bbb时,仍然为空。在javascript错误控制台中,我可以读取:dojo.byId[undefined]不是一个函数。我花了很多时间来做这项工作,尝试了很多选择,但没有运气。我只能在onload事件上填充dojoselect,而不能在与另一个select关联的onchange或与按钮关联的onclick上填充。使用标准HTML选择项,一切正常。 要解决此问题,我可以做些什么


谢谢

这里或多或少是您的工作示例

<html> 
    <head> 
            <link href="js/dijit/themes/claro/claro.css" rel="stylesheet" type="text/css" />
            <script type="text/javascript" src="js/dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script>

            <script type="text/javascript"> 
                    dojo.require("dijit.form.Select");
                    function updateB(val){ 
                            var menu = dijit.byId("selB"); 
                            menu.options.lenght=0; 
                            if(val=="aaa") 
                                    menu.addOption({value: "aa", label: "aa"}); 
                            else 
                                    menu.addOption({value: "bb", label: "bb"}); 
                    } 
                    dojo.addOnLoad(function()
                    {
                        var menu = dijit.byId("selA"); 
                        menu.addOption([{value: "aaa", label: "aaa"},{value: "bbb", label: "bbb"}]); 
                    });
            </script> 
    </head> 

    <body> 
            <select id="selA" name="selA" dojoType="dijit.form.Select" style="width: 180px;" onchange="updateB(this.get('value'));"></select> 
            <select id="selB" name="selB" dojoType="dijit.form.Select" style="width: 180px; "></select> 
    </body> 
我改变了什么:

移动了设置selA选择的代码 dojo.addOnLoad。这是必须的,, 因为以前你被审判的时候 要获取selA小部件,它没有完全 已创建,dojo无法返回其 还没有。Dojo创建它的小部件 页面完全加载后。之后 它创造了它所召唤的一切 addOnLoad函数。所以你应该 在这个函数中放置您所有的 初始化的东西。 Select是一种dijit类型的小部件,所以 应使用dijit.byId而不是 dojo.byId。