我目前有一个dojo复选框组(dijit.form.CheckBox,其名称格式为“some_name []”)它完全按照需要工作但是我需要添加一个全选按钮/链接,最好不是另一个复选框(这个不应该是必要的,因为功能将在js中实现。
使用标准js的“dojo”方式是否可以使元素正常,但设置element.checked = true无效。出于测试目的,我已经禁用了dijit.form.CheckBox(因此我有常规的bog标准复选框),并且我能够使用dojo'ified时失败的代码标记所有选中的框。
我正在运行dojo 1.5,如果这有任何区别
更新:
好的,似乎是设置复选框被选中/取消选中但不重新渲染dojo小部件。我也被告知复选框没有任何我希望它们作为dijit.form.CheckBox对象的方法(比如set()方法)。
答案 0 :(得分:6)
所以我发现了问题所在。我正在做dojo.query()来获取复选框组dom节点。但是,这不会返回dijit小部件。为了得到我必须做的那些:
nodes = dojo.query('[name=\"checkbox_group[]\"]');
dojo.forEach(nodes,function(node)
{dijit.getEnclosingWidget(node).set("checked",true);});
通过操纵窗口小部件,它可以直观地更新。此外,我不知道复选框输入元素不是窗口小部件本身,因此dijit.byNode(node)
返回undefined,因为复选框节点与任何初始化的dijit窗口小部件都不匹配。
答案 1 :(得分:0)
我们这样做,如下所示。这是从许多其他东西中删除的,这些东西在加载页面时被调用的“addHandlers”函数中作为处理程序连接起来。
selectall
和clearall
是我们联系的链接。
var selectall = dojo.byId('selectall');
var clearall = dojo.byId('clearall');
var checklist = getCheckboxList(); // Magic happens here (1)
dojo.connect(selectall, "onclick",
function(evt) {
allClick(evt, checklist, true);
}
);
dojo.connect(clearall, "onclick",
function(evt) {
allClick(evt, checklist, false);
}
);
(1)我们根据一些丑陋的标准获得了一个将受影响的复选框列表,我们使用该列表的次数超过了这个检查/清除 - 你可以做一些更简单的事情来获取你的。
“allClick”功能只检查或取消选中您传递的内容列表
function allClick(evt, list, checkstate)
{
dojo.forEach(list,
function(el, idx, ary) {
el.checked = checkstate;
}
);
evt.preventDefault(); // keep the link from firing
}
答案 2 :(得分:0)
如果有人正在考虑这个答案,现在(4年后)还有另一种方法可以做到这一点:
var checkboxes = registry.findWidgets(dom.byId('checkGroupWrapper'));
checkboxes.forEach(function (checkboxWidg) {
checkboxWidg.set('checked', true);
});