dojo dijit/表单/选择时选择事件

zqry0prt  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(203)

除了onChange之外,还有其他事件可以注册到dojo/form/Select吗?
我需要执行回调函数,每次用户选择一个选项,即使他选择了相同的选项,因为它是选定的最后一次。onSelect、onClick不起作用。

var spatialSelectionStore = new Memory({
        data: [
            { label: "Rectangle", id: "RECT" },
            { label: "Polygon", id: "POLY" },
            { label: "Circle", id: "CIRC" },
            { label: "Freehand", id: "FREE" }
        ]
    });

    var os = new ObjectStore({ objectStore: spatialSelectionStore });

    spatialQuerySelect = new Select({
        id: "selectionType",
        style: { width: "100px" },
        store: os,
        onChange: activateDrawTool
    }, "cp_selectByShapeId");
    spatialQuerySelect.startup();
kqlmhetl

kqlmhetl1#

我找到了一种方法来做到这一点,虽然这可能不是最好的方法,它似乎工作。
我设置了一个方面来在Select._setValueAttr函数执行之后触发函数,每次单击下拉菜单或下拉菜单项时,小部件都会触发这个函数。我添加了一个检查,以确保只有在单击菜单项时才触发函数回调(在菜单关闭之后)。我还不得不删除您手动添加到SelectonChange回调,因为这干扰了方面。

超文本标记语言

<div id="foo"></div>

字符串

脚本语言

require(["dojo/aspect", "dojo/store/Memory", "dijit/form/Select", "dojo/data/ObjectStore", "dojo/dom-construct", "dojo/dom", "dojo/aspect"], function(aspect, Memory, Select, ObjectStore, domConstruct, dom, aspect) {

    var spatialSelectionStore = new Memory({
        data: [
            { label: "Rectangle", id: "RECT" },
            { label: "Polygon", id: "POLY" },
            { label: "Circle", id: "CIRC" },
            { label: "Freehand", id: "FREE" }
        ]
    });

    var os = new ObjectStore({ objectStore: spatialSelectionStore });

    spatialQuerySelect = new Select({
        id: "selectionType",
        style: { width: "100px" },
        store: os
    }, "cp_selectByShapeId");
    spatialQuerySelect.startup();

    aspect.after(spatialQuerySelect, "_setValueAttr", function() {
        if(spatialQuerySelect.dropDown.isShowingNow === false) {
            alert(spatialQuerySelect.get('value'));
        }
    });

    domConstruct.place(spatialQuerySelect.domNode, dom.byId("foo"), "first");
});

**一个

方面可以非常强大,但是如果使用太多,并且过于依赖它们,最终可能会得到一堆 * 可怕 * 的意大利面条代码,所以我建议您少用它们,并且只在必要时使用。
如果您不熟悉它们的功能,您可以告诉一个方面触发beforeafteraround另一个方法,该方面将“侦听”正在触发的方法,并根据您的函数callback. Further documentation适当地执行操作。

k3fezbri

k3fezbri2#

spatialQuerySelect.dropDown.on("execute",function() {
alert(spatialQuerySelect.get('value'));
});

这也将对所有选项起作用。

onExecute: function(){
            // summary:
            //      Attach point for notification about when a menu item has been executed.
            //      This is an internal mechanism used for Menus to signal to their parent to
            //      close them, because they are about to execute the onClick handler.  In
            //      general developers should not attach to or override this method.
            // tags:
            //      protected
        },

相关问题