0

这与这篇文章密切相关: HTML <select> 是否有 onSelect 事件或等效事件?

...但专门针对 Dojo ComboBox..(我正在使用带有 ArcGIS JSAPI 的 Dojo)。我有三个组合框,它们使用由下拉列表中的选择触发的查询来填充后继者。我的问题是,如果第二个组合框选择保持不变,则不会触发查询。我尝试使用 onblur 和其他几个事件而不是 onchange,并尝试在 JS 中重置选择的值,但都没有奏效。该值被重置,但组合框仍然像存在相同的值一样,因此 onchange 不起作用。我尝试了上面链接中的许多方法,但没有一个对我有用。据我所知,我的组合框不会生成任何 selectedIndex。有什么建议么?谢谢,J

4

1 回答 1

2

所有三个 dijit和子类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,因为存在并且您可以立即在其下拉列表dropDown中收听:onExecutedijit/Menu

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

在 jsFiddle 上查看所有三个操作:http: //jsfiddle.net/phusick/Hp5jr/

于 2012-09-13T11:22:07.783 回答