这与这篇文章密切相关: Is there an onSelect event or equivalent for HTML <select>?
...但是特别针对Dojo ComboBox ..(我正在使用Dojo w / ArcGIS JSAPI)。 我有三个组合框,使用下拉列表中的选项触发查询来填充后继者。我的问题是,如果第二个组合框选择保持不变,则不会触发查询。我已经尝试过使用onblur和其他几个事件而不是onchange,并尝试重置JS中的选择值,但两者都没有用。该值被重置,但组合框仍然表现为相同的值,因此onchange不起作用。我在上面的链接中尝试了很多方法,但没有一个对我有效。据我所知,我的组合框不会生成任何selectedIndex。 有什么建议?谢谢,J
答案 0 :(得分:2)
所有三个dijits dijit/form/Select
,dijit/form/FilteringSelect
和dijit/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
小部件。问题是,在ComboBox
和FilteringSelect
的情况下,此窗口小部件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/