javascript - 为什么不从 dojo 小部件元素触发事件?

标签 javascript html dojo

我遇到了 dojo 小部件不触发事件的困难。

我曾尝试使用 dojo.query 将事件绑定(bind)到某些元素,但它不会触发事件。 所以我尝试使用 dijit.registry。但它也不会在单击元素时触发事件。

HTML

<div class="buttons">
     <input id="radio1" type="radio" data-dojo-type="dijit/form/RadioButton" name="radiobtn" /> <label for="radio1">one</label>
     <input id="radio2" type="radio"  data-dojo-type="dijit/form/RadioButton" name="radiobtn" /> <label for="radio2">Two</label>
     <input id="radio3" type="radio" data-dojo-type="dijit/form/RadioButton" name="radiobtn" /> <label for="radio3">Three</label>
 </div>

Javascript

require(["dojo/parser", "dojo/query", "dijit/registry", "dijit/form/RadioButton", "dojo/domReady!"], function(parser, query, registry) {
    parser.parse();

    on(query('.buttons input'), 'click', function() {
        alert('Clicked');           
     });   

    on(registry.byId('radio1'), 'click', function() {
        alert('Clicked Radio1');    
    });   
});

这里是 Demo这个问题。

如何使用 dojo.query 触发事件到 dojo 小部件元素?

最佳答案

你不知道。如果您阅读 reference guide您会注意到 dojo/on 模块仅用于 DOM 事件。您的小部件也使用 DOM 节点,但不应使用它们,因为它们被 widget events 封装了。 .

要注册事件处理程序,您应该使用 on()功能,例如:

registry.byId("radio1").on("click", function() {
    console.log("Clicked");
});

我还更新了你的 JSFiddle .


如果您真的想使用dojo/query(处理多个单选按钮),那么您可以使用byNode() 来实现。 dijit/registry 模块访问基于该 DOM 节点的小部件。例如:

query(".dijitRadio").forEach(function(domNode) {
    registry.byNode(domNode).on("click", function() {
        console.log("Clicked");
    });
});

但是你必须小心这一点。当 DOM 节点转换为小部件并替换为 dijit/form/RadioButton 使用的模板时,input 字段消失了。获取单选按钮的 DOM 节点的最佳方法是使用 dijitRadio 类。

您的 JSFiddle 的另一个更新.


小提示:如果您对单选按钮的状态更改(开/关)感兴趣,那么处理 onChange 事件可能是更好的主意.

关于javascript - 为什么不从 dojo 小部件元素触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092252/

相关文章:

javascript - Highcharts 在具有多个系列和共享工具提示的图表之间共享工具提示

javascript - 函数体的解结构变量和变量部分之间的区别

node.js - 使用 Sails.js,Dojo javascript 文件/路径不会立即显示在浏览器中

javascript - 本地比较失败的单元测试

javascript - 如何将遗留的 Dojo Toolkit 代码转换为 AMD?

javascript - 如何在 JavaScript 中获取图像的 URL?

javascript - 如何在 OS X 中将 NODE_ENV 设置为生产/开发

javascript - 如何绘制形状然后将其声明为变量?

html - 图像在 IE 中显示,而不是 Chrome 或 Firefox - http ://localhost:11/myFile being Prepended

android - 全宽视频不工作