2011-01-26 41 views
2

我目前有一个dojo复选框组(dijit.form.CheckBox名称形式为“some_name []”)它的工作原理完全按照需要,但是我需要添加一个全选按钮/链接,最好不要选择另一个复选框(这不应该是必要的,因为该功能将在js中实现)。选择所有关于dojo复选框组

是一个“道场”的方式来做到这一点,因为使用标准的JS似乎得到的元素很好,但设置element.checked = true没有效果。为了测试的目的,我已经禁用了dijit.form.CheckBox(所以我有常规的bog标准复选框),并且我可以标记所有用dojo化后失败的代码检查的框。

我跑道场1.5如果有什么差别

UPDATE:

OK,它似乎是设置复选框被选中/取消,但不会重新绘制Dojo小部件。我也被告知复选框没有任何我期望它们作为dijit.form.CheckBox对象(如set()方法)的方法。

回答

6

于是我发现了什么问题了。我正在做dojo.query()来获得复选框组dom节点。但是,这不会返回dijit小部件。为了让我不得不这样做:

nodes = dojo.query('[name=\"checkbox_group[]\"]'); 
dojo.forEach(nodes,function(node) 
    {dijit.getEnclosingWidget(node).set("checked",true);}); 

通过操纵小部件,它可以正确更新。另外,我并不知道复选框input元素不是widget本身,所以dijit.byNode(node)返回undefined,因为复选框节点不匹配任何初始化的dijit小部件。

0

我们做了这样的事情如下所示。这是从很多其他事物中删去的,这些东西在页面加载时会被调用的“addHandlers”函数中作为处理程序连接起来。

selectallclearall是我们联系的链接。

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 
} 
+0

这就是我一直在做的事情。问题是道场似乎是重写e1.checked = true; – Endophage 2011-01-26 21:44:16

0

如果有些人在看这个答案,现在有(4年后),另一种方式来做到这一点:

var checkboxes = registry.findWidgets(dom.byId('checkGroupWrapper')); 

checkboxes.forEach(function (checkboxWidg) { 
    checkboxWidg.set('checked', true); 
}); 

this documentation