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

时间:2012-11-26 02:11:55

标签: 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");

});

如果相反,以下钩子进入点击工作:

on(dom.byId("myselect"),"click",function (evt){
  • 但我希望在用户点击和更改后捕获值

我确信它比回到Plain ol javascript onChange ...

更简单

THX

5 个答案:

答案 0 :(得分:4)

您可以尝试这样的事情:

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

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

我已经多次在参考指南中看到过这种情况,例如{em>'选择按商店付款'{/ 3>的in the dijit/form/select' s reference-guide

也许它甚至回归handle,到目前为止我还没有看过这个。但我想它应该有用。

编辑:

考虑到@ phusick的评论,我想补充一点,您也可以在调用{{1}中简单地将"change"更改为"onChange"或将dom更改为dijit }

答案 1 :(得分:2)

跟随@ nozzleman的回答尝试

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

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

如果您使用on代替connect,那么您不必撰写onChange,只需撰写change即可。

答案 2 :(得分:0)

与上述答案类似,执行dijit.ById查找正确的元素,然后注册'onItemClick'事件。

创建选择下拉列表以编程方式将_menu附加到您创建选择项的任何节点,以便'search'在页面init上变为'search_menu',您可以执行以下操作:

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

答案 3 :(得分:0)

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

以下是您修改的代码以访问Dijit并处理“更改”事件:

require(["dijit/registry", "dojo/on"], function(registry, on) {
   on(registry.byId("myselect"), "change", function (value) {
         alert("change_event.value = " + value);
   });
});

答案 4 :(得分:0)

晚会,但我最近遇到了这个问题。希望我的回答能帮助一些可怜的灵魂保留一些遗留代码。答案是针对组合框,但也适用于选择 -

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);
});

参考:https://stackoverflow.com/a/12422155/4564016