onChange不足以从Dojo组合框触发查询

onChange not sufficient to trigger query from Dojo Combobox

本文关键字:查询 组合 不足以 Dojo onChange      更新时间:2023-09-26

这与本文密切相关:对于HTML<选择>?

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

所有三个dijit 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存在,并且您可以在其下拉列表dijit/Menu上立即收听onExecute

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

在jsFiddle上查看这三个方面的操作:http://jsfiddle.net/phusick/Hp5jr/