onChange不足以触发Dojo Combobox的查询

时间:2012-09-11 18:59:07

标签: javascript combobox dojo onchange arcgis

这与这篇文章密切相关: Is there an onSelect event or equivalent for HTML <select>?

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

1 个答案:

答案 0 :(得分:2)

所有三个dijits dijit/form/Selectdijit/form/FilteringSelectdijit/form/ComboBox子类dijit/_HasDropDown,并为其添加了一个属性dropDown

// 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存在且您可以立即在其dropDown onExecute上收听dijit/Menu

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

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