Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不从dojo小部件元素触发事件?_Javascript_Html_Dojo - Fatal编程技术网

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

Javascript 为什么不从dojo小部件元素触发事件?,javascript,html,dojo,Javascript,Html,Dojo,我很难不触发事件 我曾尝试使用dojo.query将事件绑定到某些元素,但它不会触发事件。 所以我尝试了dijit.registry。但它也不会在单击元素时触发事件 HTML <div class="buttons"> <input id="radio1" type="radio" data-dojo-type="dijit/form/RadioButton" name="radiobtn" /> <label for="radio1">one<

我很难不触发事件

我曾尝试使用
dojo.query
将事件绑定到某些元素,但它不会触发事件。 所以我尝试了
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>
下面是这个问题的答案


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

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

要注册事件处理程序,应使用函数,例如:

registry.byId("radio1").on("click", function() {
    console.log("Clicked");
});
query(".dijitRadio").forEach(function(domNode) {
    registry.byNode(domNode).on("click", function() {
        console.log("Clicked");
    });
});
我还更新了你的


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

registry.byId("radio1").on("click", function() {
    console.log("Clicked");
});
query(".dijitRadio").forEach(function(domNode) {
    registry.byNode(domNode).on("click", function() {
        console.log("Clicked");
    });
});
但是你必须小心这个。当DOM节点被转换为小部件并由
dijit/form/RadioButton
使用的模板替换时,
input
字段消失。获取radiobutton的DOM节点的最佳方法是使用
dijitRadio

您的应用程序的另一个更新



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

是否有任何方法可以将一些小部件结合绑定事件?也就是说,具有相同类的小部件需要启动一个公共函数。我用一些可能解决这个问题的方法更新了我的答案。但是,您可能需要使用
.buttons.dijitRadio
选择器,而不是使用
.dijitRadio
选择器。