以下代码返回Uncaught TypeError:无法将属性'checked'设置为null。 选中编程设置复选框的正确方法是什么?
array.forEach(this._getAllCheckBoxIDs(), function(item){
dom.byId(item).checked = true;
}, this);
答案 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;
我建议使用像:
这样的setterwidgetReference.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>