我建议以某种方式关联“对应”元素,我在这种方法中使用了一个类,给出了 HTML:
<input class="A" type="radio" name="RadioGroup1" value="A" id="A">A
<input class="B" type="radio" name="RadioGroup1" value="B" id="B">B
<br><br>
<input class="A" type="radio" name="RadioGroup2" value="A1" id="A1">A1
<input class="B" type="radio" name="RadioGroup2" value="B1" id="B1">B1
这允许以下 jQuery 工作:
$('input[type="radio"]').change(function(){
$('.' + this.className).prop('checked', this.checked);
});
JS Fiddle demo.
或者使用自定义data-* 属性:
<input data-group="A" type="radio" name="RadioGroup1" value="A" id="A">A
<input data-group="B" type="radio" name="RadioGroup1" value="B" id="B">B
<br><br>
<input data-group="A" type="radio" name="RadioGroup2" value="A1" id="A1">A1
<input data-group="B" type="radio" name="RadioGroup2" value="B1" id="B1">B1
使用以下 jQuery,使用 attribute-equals 选择器:
$('input[type="radio"]').change(function(){
$('[data-group="' + $(this).data('group') + '"]').prop('checked', this.checked);
});
JS Fiddle demo.
同样,您也可以将元素包装成单独的组:
<fieldset>
<input data-group="A" type="radio" name="RadioGroup1" value="A" id="A" />A
<input data-group="B" type="radio" name="RadioGroup1" value="B" id="B" />B
</fieldset>
<fieldset>
<input data-group="A" type="radio" name="RadioGroup2" value="A1" id="A1" />A1
<input data-group="B" type="radio" name="RadioGroup2" value="B1" id="B1" />B1
</fieldset>
并使用:
$('input[type="radio"]').change(function () {
$('input[type="radio"]:nth-child(' + ($(this).index() + 1) + ')').prop('checked', this.checked);
});
JS Fiddle demo.
顺便说一句,如果您将相关文本包装到label 元素(带有for 属性)中,应该给出:
<input type="radio" name="RadioGroup1" value="A" id="A"><label for="A">A</label>
<input type="radio" name="RadioGroup1" value="B" id="B"><label for="B">B</label>
<input type="radio" name="RadioGroup2" value="A1" id="A1"><label for="A1">A1</label>
<input type="radio" name="RadioGroup2" value="B1" id="B1"><label for="B1">B1</label>
那么下面的jQuery会先创建合适的包装然后使用index()方法正确识别合适的other单选inputs来检查:
$('input[type="radio"]').each(function () {
if (!(this.parentNode instanceof HTMLFieldSetElement)) {
var fieldset = $('<fieldset />');
fieldset.insertBefore(this).append(document.getElementsByName(this.name));
}
$(this).after($('label[for="' + this.id + '"]'));
}).change(function(){
$('input[type="radio"]:nth-child(' + ($(this).index() + 1) + ')').prop('checked', this.checked);
});
JS Fiddle demo.
参考资料: