Dojo js toolkit: проблема с динамически заполненным выделением - PullRequest
0 голосов
/ 03 января 2011

У меня возникли некоторые проблемы с dijit.form. Выберите элементы.

На странице у меня есть два из этих элементов: один заполняется во время загрузки HTML-страницы, а другой заполняется в зависимости от того, какой вариант пользователь выбрал на первом.

Вот пример того, о чем я говорю (сейчас я держу код простым, но в реальной версии я включил все необходимые модули и библиотеки dojo в раздел head):

<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, когда я выбираю aaa или bbb в selA, остается пустым.В консоли ошибок JavaScript я могу прочитать: dojo.byId [undefined] не является функцией.Я потратил много времени, пытаясь сделать эту работу (перепробовал много альтернатив), но безуспешно.Я могу заполнить dojo select только при событиях onload, а не onchange (связанных с другим select) или onclick (связанных с кнопкой).Со стандартным выбором элементов HTML все работает хорошо вместо этого.Что я могу сделать, чтобы решить эту проблему?

Спасибо

1 Ответ

0 голосов
/ 03 января 2011

Вот более или менее ваш рабочий пример

<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, поэтому вместо dojo.byId следует использовать dijit.byId.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...