【问题标题】:dojo/form/select onchange event not working for me in dojo 1.8dojo/form/select onchange 事件在 dojo 1.8 中对我不起作用
【发布时间】:2012-11-13 12:17:15
【问题描述】:

我正在试用 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){
  • 但我想在用户点击和更改后捕获值

我相信这比回到普通的 javascript onChange 更简单...

谢谢

【问题讨论】:

标签: dojo


【解决方案1】:

你可以试试这样的:

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

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

我在参考指南中多次看到过这一点,例如in the dijit/form/select' s reference-guide'A Select Fed By A Store'

也许它甚至返回handle,到目前为止我还没有查到这个。但我想它应该可以工作。

编辑:

考虑到@phusick 的评论,我想补充一点,您也可以在调用on(...) 时将"change" 更改为"onChange" 或将dom 更改为dijit

【讨论】:

  • 好吧,我们很高兴能够帮助您!那么接受答案怎么样? ;)
【解决方案2】:

跟随@nozzleman 的回答尝试

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

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

如果你使用on而不是connect,那么你不必写onChange,你可以简单地写change

【讨论】:

  • Thx - 额外的说明 - 使用 element.on 构造比使用 on (domnode,"event") 更好,还是只是说同一件事的两种方式....
  • 我认为前者更好有两个原因。首先,它遵循其他 JS 框架(如 jQuery)的 API,其次,它可能会在未来成为原生的。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      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

      【讨论】:

        猜你喜欢
        • 2016-04-12
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多