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
选择器。