1

ちょっと私は次のコードを使用してカスケードドロップダウンを作成しています.1つの関数 xyz() を作成しました.1つの関数 xyz() で ajax が呼び出され、サーブレットを呼び出して結果変数に値を設定します.結果の値はコンマで区切られているので、コンマで分割し、ストアを2番目のドロップダウンに分割します..問題は、最初のドロップダウンを変更したときです.2番目のドロップダウンにはデータが入力されていませんが、ajaxが呼び出され、値を2回目に変更すると、2番目のdropdwnに間違った値が入力されます.どれが私がプレビューを選択したか..何が間違っているのか教えてください

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

    <link rel="stylesheet" href="js/dojo/dijit/themes/claro/document.css"/>
    <link rel="stylesheet" href="js/dojo/dijit/themes/claro/claro.css" />
    <script src='js/dojo/dojo/dojo.js' data-dojo-config=' parseOnLoad: true'></script>
    <script>
        dojo.require("dijit.form.ComboBox");
        dojo.require("dojo.data.ItemFileReadStore");
        dojo.require("dojo.ready");
        dojo.require("dojo.store.Memory");
        require(["dojo/parser", "dijit/form/ComboBox","dijit/form/TextBox","dojo/dom-construct"]);
     function xyz(){
      dojo.xhrPost({
            // The URL to request
            url: "populate",
            timeout :  3000 ,
            content: {
                username: document.getElementById("state").value

            },

            load: function(result) {                
         require(["dijit/form/ComboBox", "dojo/ready","dojo/store/Memory"], 
                function(ComboBox,ready,Memory){

                    ready(function() {

                        dojo.connect(dijit.byId('state'), 'onChange', function() {

                            var stateSelect = dijit.byId('stateSelect');

                            if (!stateSelect) {
                                stateSelect = new ComboBox({id: "stateSelect",name:"select",value: "Select",searchAttr:"name"},"stateSelect");

                            }

                            var str_array = result.split(',');

                            var data = [];
                            dojo.forEach(str_array, function(item, idx) {
                                data.push({
                                    id: idx,
                                    name: item                    
                                });
                                stateSelect.set('store', new Memory({data: data}));


                            });


                        }); // dojo.connect



                    }); // ready   



                }); // require  

        }



      });

    }


    </script>
</head>
<body class="claro">

    <select data-dojo-type="dijit.form.ComboBox" id="state" name="state" onchange="xyz()"  >

        <option selected>Andaman Nicobar</option>
        <option>Andhra Pradesh</option>
        <option>Arunachal Pradesh</option>


    </select>

    <select data-dojo-type="dijit.form.ComboBox" id="stateSelect" name="stateSelect">

    </select>


</body>

4

1 に答える 1

0

2 回目の試行で stateSelect が生成される理由は、状態の onChange イベントを、stateSelect を生成するジョブを実行するコールバックにバインドする dojo.connect を使用するためです。

dojo.connect を削除します。あなたはそれを必要としません。

正しい値を取得するには、次のようなことを行う必要があります。dijit レジストリを使用して、registry.byId("state").get("value") 代わりに移動する必要がありますdocument.getElementById("state").value

また、おそらくここでFilteringSelectを使用することをお勧めします。相違点を参照してください:

また、いくつかの詳細情報:

モジュールをxhrPost使用する代わりにdojo.request

代わりにonchange=xyz()、関数をコールバックとして使用してdomの準備ができたら、イベントハンドラーを追加できます

于 2012-12-01T14:27:33.240 に答える