在dojo复选框组中选择all

时间:2011-01-26 21:08:52

标签: javascript html dojo

我目前有一个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()方法)。

3 个答案:

答案 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”函数中作为处理程序连接起来。

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
}

答案 2 :(得分:0)

如果有人正在考虑这个答案,现在(4年后)还有另一种方法可以做到这一点:

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

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

请参阅this documentation