jquery选择具有动态名称的多个无线电输入

时间:2017-02-15 20:06:22

标签: jquery jquery-selectors radio-button contains radio-group

我有一组广播组如下:

<INPUT TYPE='radio' NAME='SI1' VALUE='0'>Y</br>
<INPUT TYPE='radio' NAME='SI1' VALUE='1'>N</br>
<INPUT TYPE='radio' NAME='SI1' VALUE='2'>NA</br>

<INPUT TYPE='radio' NAME='1S1' VALUE='0'>group1</br>
<INPUT TYPE='radio' NAME='1S1' VALUE='1'>group2</br>
<INPUT TYPE='radio' NAME='1S1' VALUE='2'>group3</br>

<INPUT TYPE='radio' NAME='1S2' VALUE='0'>group1</br>
<INPUT TYPE='radio' NAME='1S2' VALUE='1'>group2</br>
<INPUT TYPE='radio' NAME='1S2' VALUE='2'>group3</br>

<INPUT TYPE='radio' NAME='SI2' VALUE='0'>Y</br>
<INPUT TYPE='radio' NAME='SI2' VALUE='1'>N</br>
<INPUT TYPE='radio' NAME='SI2' VALUE='2'>NA</br>

<INPUT TYPE='radio' NAME='2S1' VALUE='0'>group1</br>
<INPUT TYPE='radio' NAME='2S1' VALUE='1'>group2</br>
<INPUT TYPE='radio' NAME='2S1' VALUE='2'>group3</br>

<INPUT TYPE='radio' NAME='2S2' VALUE='0'>group1</br>
<INPUT TYPE='radio' NAME='2S2' VALUE='1'>group2</br>
<INPUT TYPE='radio' NAME='2S2' VALUE='2'>group3</br>

<INPUT TYPE='radio' NAME='2S3' VALUE='0'>group1</br>
<INPUT TYPE='radio' NAME='2S3' VALUE='1'>group2</br>
<INPUT TYPE='radio' NAME='2S3' VALUE='2'>group3</br>

...

基本上我有一个单选按钮组。我想为所有单选按钮分配组头的值。 例如,如果用户在名为“SI2”的选项组中设置值2,则以“2S”开头的所有组都应具有值2.

我尝试使用我从google搜索获得的'*=''~='选择器,但没有任何效果。

$('input[type=radio][name~=SI]').change(function() {
     var names = section_index+'S';
     $('input[type=radio][name*='+names+']').value=this.value;
});

这对第一个选择器本身(包含SI的名称)不起作用,然后我改为:

$('input[type=radio][name=SI'+section_index+']').change(function() {
    var names = section_index+'S';
    $('input[type=radio][name*='+names+']').value=this.value;
});

我在一个以section_index作为控制变量的循环中完成了上述操作,这里,第一个选择器工作(名称完全匹配)但下一个选择器不工作(名称包含section_index)。 / p>

如果有帮助,我可以更改组的命名。

请考虑我是jquery的新手,所以请原谅我是否错过了非常明显的事情。

2 个答案:

答案 0 :(得分:1)

所以你想要定位所有的“SI ...”单选按钮;为此,您需要找到开始的所有单选按钮,其中包含“SI”。 “以...开头”的选择器是“^ =”:

$('input[type=radio][name^=SI]').change(function() {
    var header_radio_clicked = $(this);
    var value = header_radio_clicked.val();
    var target_name_prefix = value + "S";
    $('input[type=radio][name^='+target_name_prefix+']').val(value);
});

所以input[type=radio][name^=SI]找到名称以“SI”开头的所有单选按钮,'input[type=radio][name^='+target_name_prefix+']'将找到以“S”开头的单选按钮(即0S,1S,2S)

希望这有帮助!

答案 1 :(得分:0)

所以问题不仅在于选择单选按钮,而且还以编程方式检查它。

=~选择器仅适用于包含单词(以空格分隔) 在这种情况下,*=^=将适用于选择器。

要检查所选的单选按钮,需要使用prop功能。 此外,还应调用change()以立即反映更改。

$('input[type=radio][name^="SI"]').change(function() {
    var names = this.name.substring(2)+'S'
    $('input[type=radio][name*='+names+'][value='+this.value+']').prop('checked',true).change();
});

https://jsfiddle.net/7h71kdab/1/