使用Dojo以编程方式设置复选框已选中

时间:2016-06-28 03:51:19

标签: checkbox dojo

以下代码返回Uncaught TypeError:无法将属性'checked'设置为null。 选中编程设置复选框的正确方法是什么?

        array.forEach(this._getAllCheckBoxIDs(), function(item){
            dom.byId(item).checked = true;
        }, this);

2 个答案:

答案 0 :(得分:0)

好吧,如果您有dojo复选框的集合,那么我建议您使用registry.byId而不是dojo.byId,因为您需要复选框dojo小部件及其domNode来更新其属性。

dojo类名: -

dijit/registry

<强>例如: -

// require registry class first
array.forEach(this._getAllCheckBoxIDs(), function(item){
     registry.byId(item).set("checked", true);
}, this);

了解更多详情http://sqlfiddle.com/#!9/cb7bb/1

希望这会对你有所帮助:)。

答案 1 :(得分:0)

以下示例显示了有关如何为窗口小部件checked设置属性checkbox的编程示例。

该脚本使用与查询DOM相对的dijit/registry来获取您的复选框的引用。

而不是直接为您的小部件设置属性,如下所示:

dom.byId(item).checked = true;

我建议使用像:

这样的setter
widgetReference.set('checked', true);

这将允许小部件生命周期正常工作。

这里的实例:

https://jsfiddle.net/femtf4uh/

require(["dijit/form/CheckBox", "dijit/registry", "dijit/form/Button", "dojo/domReady!"], function(CheckBox, registry, Button) {
  new CheckBox({
    id: "checkBox0",
    name: "checkBox0",
    value: "option0",
    checked: false,
    onChange: function(event) {

    }
  }, "checkBox0").startup();
  new CheckBox({
    id: "checkBox1",
    name: "checkBox1",
    value: "option1",
    checked: false,
    onChange: function(event) {

    }
  }, "checkBox1").startup();

  var markCheckAll = function() {
    registry.toArray().forEach(function(widget) {
      if (widget.type === 'checkbox'){
        widget.set('checked', true);
      }
    });
  };
  markCheckAll();

});
<input id="checkBox0" />
<label for="checkBox">Option 0</label>
<br>
<input id="checkBox1" />
<label for="checkBox">Option 1</label>
<br>