dojo/form/select onchange事件在dojo 1.8中对我不起作用

dojo/form/select onchange事件在dojo 1.8中对我不起作用,dojo,Dojo,我正在试用dojotoolkit 1.8,但不知道如何为dojo/form/select连接onchange事件 这一切都不会发生 require(["dojo/dom","dojo/on"], function(dom,on){ on(dom.byId("myselect"),"change",function (evt){ alert("myselect_event"); }); 如果相反,则以下钩入click起作用: on(dom.byId("myselect"

我正在试用dojotoolkit 1.8,但不知道如何为dojo/form/select连接onchange事件

这一切都不会发生

require(["dojo/dom","dojo/on"], function(dom,on){
   on(dom.byId("myselect"),"change",function (evt){
         alert("myselect_event");

});
如果相反,则以下钩入click起作用:

on(dom.byId("myselect"),"click",function (evt){
  • 但我想在用户点击和更改后获取价值
我相信这比回到普通的OLJavascriptonChange更简单


Thx

您可以尝试以下方法:

    var select = dijit.byId('myselect');

    select.on('change', function(evt) {
        alert('myselect_event');
    });
我在参考指南中多次看到过这一点,例如在“商店提供的精选食品”中

也许它甚至会返回
句柄
,到目前为止,我还没有找到这个。但我想这应该行得通

编辑:


考虑到@phusick的评论,我想补充一点,你也可以在(…)上调用
之后,简单地将
“change”
更改为
dom
更改为
dijit
,试试@nozzleman的答案

var select = registry.byId('myselect');

select.on('change', function(evt) {
    alert('myselect_event');
});

如果在
上使用
而不是
连接
,则无需在更改时写入
onChange
,只需编写
change

与上述答案类似,执行dijit.ById以找到正确的元素,然后注册“onItemClick”事件

以编程方式创建“选择”下拉列表会在创建“选择项”的任何节点上附加一个_菜单,因此“搜索”在页面初始化时变为“搜索”菜单。您可以执行以下操作:

  dojo.connect(dijit.byId('search_menu'),'onItemClick',function(){
        //console.log("search menu");
        doSearch('recreation');
     });    

正如其他人所指出的,您正在尝试使用DOM访问Dijit。此外,“更改”事件的匿名函数的参数是用户选择的值,而不是事件本身

下面是修改后的代码,用于访问Dijit并处理“更改”事件:


晚会迟到了,但我最近遇到了这个问题。希望我的回答能帮助一些可怜的人维护一些遗留代码。答案适用于combobox,但也适用于select-

onChange不足以从Dojo Combobox触发查询。需要将侦听器附加到下拉项

select.dropDown.on("itemClick", function(dijit, event) {
var node = dijit.domNode;
console.log(domAttr.get(node, "data-info-attribute"));
// or
console.log(node.dataset.infoAttribute);
});

Ref:

您正在混合使用Dijit对象和DOM节点@诺泽曼的解决方案应该有效。如果您想了解更多信息,请看一下Thx——额外的澄清——是否使用element.on构造比使用on(domnode,“event”)更好,或者只是用两种方式表达相同的内容……我认为前者更好,原因有二。首先,它遵循了其他JS框架(如jQuery)的API,其次,它可能在将来成为原生的。好吧,我们很高兴能够帮助您!那么接受一个答案怎么样?;)
select.dropDown.on("itemClick", function(dijit, event) {
var node = dijit.domNode;
console.log(domAttr.get(node, "data-info-attribute"));
// or
console.log(node.dataset.infoAttribute);
});