Dojo 单选按钮 - 以编程方式检查其中之一

Dojo Radiobutton - check one of them programatically

我有一组 RadioButton dojo dijits,我的任务是根据请求响应检查其中一个 json。 Json 将有一个对应于 group1 中 RadioButtons 值之一的值 例如: { "group1":“1” }

<input type="radio" data-dojo-type="dijit/form/RadioButton" name="group1" value="1"/> <label>1</label>
<input type="radio" data-dojo-type="dijit/form/RadioButton" name="group1" value="2"/> <label>2</label>
<input type="radio" data-dojo-type="dijit/form/RadioButton" name="group1" value="3"/> <label>3</label>

我怎样才能很好地做到这一点?

这里有一种使用 dojo

的方法
function test(json) {
    var obj = dojo.fromJson(json);
    for (prop in obj) {
        dojo.query('input[name="' + prop + '"][value="' + obj[prop] + '"]').attr('checked', 'checked');
    }
}

其中json是你收到的字符串,obj是从JSON解码后对应的对象。此代码遍历该对象的属性(例如 "group1"),然后通过 namevalue 找到具有 css 选择器的元素,然后设置 checked 找到的元素的属性,如果有的话。

我把它放在 fiddle 中,按下按钮后会调用 test 函数。

如果您的 RadioButton 小部件恰好位于 dijit/form/Form 内,到目前为止最方便的方法是设置表单的 value,因为 dijit/form/_FormMixin 的值setter 会自动将值映射到适当的 RadioButton 小部件。

form.set('value', { group1: '1' });

(即使表单有其他字段,使用只有一个 属性 的对象调用 set('value') 也只会更新表单中的那个字段。)

除了这个选项(如果你不在 dijit/form/Form 中并且由于某种原因不能使用它),你可以像 trincot 建议的那样做,但是因为你使用的是小部件,你需要设置适当的widget的checked 属性,而不仅仅是输入节点的直接:

registry.getEnclosingWidget(query('[name=group1][value=1]')[0]).set('checked', true);

这里 fiddle 展示了这两种方法。