0

これは、次の投稿と密接に関連しています: Is there an onSelect event or equal for HTML <select>?

...しかし、具体的には Dojo ComboBox ..(私は Dojo w/ ArcGIS JSAPI を使用しています)。3 つのコンボ ボックスがあり、ドロップダウン リストからの選択によってトリガーされるクエリを使用して、後継者を設定します。私の問題は、2 番目のコンボボックスの選択が同じままである場合、クエリがトリガーされないことです。onchange の代わりに onblur と他のいくつかのイベントを使用してみました。また、JS で選択の値をリセットしようとしましたが、どちらも機能しませんでした。値はリセットされますが、コンボボックスは同じ値が存在するかのように動作するため、onchange は機能しません。上記のリンクにある多くの方法を試しましたが、うまくいきませんでした。私が知る限り、私のコンボボックスは selectedIndex を生成しません。助言がありますか?ありがとう、J

4

1 に答える 1

2

3つのdijitsとサブクラスすべてdijit/form/Select、およびそれらにプロパティを追加します。dijit/form/FilteringSelectdijit/form/ComboBoxdijit/_HasDropDowndropDown

// dropDown: [protected] Widget
//     The widget to display as a popup.  This widget *must* be
//     defined before the startup function is called.
dropDown: null

あなたが欲しいのは、このdropDownウィジェットで聞くことです。問題は、の場合ComboBoxFilteringSelectこのウィジェットdijit/form/_ComboBoxMenuが遅延してインスタンス化されることです。つまり、ポップアップを初めて開いたときです。したがって、最初にdropDownを開くことにフックしてonClickから、dropDownにイベントリスナーを追加する必要があります。

var signal = aspect.after(comboBox, "openDropDown", function() {
    comboBox.dropDown.on("click", function(node) {
        console.log("value:", comboBox.get("value"));
        console.log("selectedIndex:", domAttr.get(node, "item"));  // <= this is not an identifier
    }
    signal.remove();  // remove aspect so it called only once
}

が存在し、そのドロップダウンですぐに聞くことができるdijit/form/Selectため、を使用する場合は少し簡単です。dropDownonExecutedijit/Menu

select.dropDown.on("execute", function() {
    setTimeout(function() {
        console.log("value:", select.get("value"))
    });
});

jsFiddleで3つすべての動作を確認してください:http://jsfiddle.net/phusick/Hp5jr/

于 2012-09-13T11:22:07.783 に答える