我看过这些帖子: jQuery selector for inputs with square brackets in the name attribute Escape square brackets when assigning a class name to an element Square brackets meaning string wont work
但我仍然无法使用方括号来正确处理名称。
当我使用带有rails form_tag的jquery时,我没有任何问题,因为单选按钮的名称只是“选项”,没有方括号。当我切换到rails form_for时,rails包含对象“resource”,因此单选按钮的名称变为“resource [option]”。这些方括号导致jquery停止工作。正如您在下面将要注意的那样,我尝试使用//来处理括号,但它仍然不起作用。
带有form_tag的代码有效:
$("input:radio[name='option']").click(function(){
if(this.value == 'no_<%= user.id %>' && this.checked){
$("#fields_<%= user.id %>").hide();
}
if(this.value == 'yes_<%= user.id %>' && this.checked){
$("#fields_<%= user.id %>").show();
}
});
下面的代码与form_for(@resource)不起作用:
$("input:radio[name='resource\\[option\\]']").click(function(){
if(this.value == 'resource_option_no_<%= user.id %>' && this.checked){
$("#fields_<%= user.id %>").hide();
}
if(this.value == 'resource_option_yes_<%= user.id %>' && this.checked){
$("#fields_<%= user.id %>").show();
}
});
任何帮助将不胜感激。感谢
答案 0 :(得分:0)
您分隔搜索值或您转义元字符但不能同时。因此,使用:
$("input:radio[name='resource[option]']")....
或者:
$("input:radio[name=resource\\[option\\]]")....
console.log( 'Escaped', $("input:radio[name=resource\\[option\\]]").val() );
console.log( 'Delimited', $("input:radio[name='resource[option]']").val() );
$(':radio[name=resource\\[option\\]]').on('change', function() {
console.log( 'Change event fired checkbox checked?', this.checked );
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" name="resource[option]" value="3432"/>
&#13;
答案 1 :(得分:0)
由于您使用的是属性值选择器,因此无需转义[]
。另外,我建议您使用change
事件和.toggle(boolean)
函数。
$("input:radio[name='resource[option]']").change(function(){
$("#fields_<%= user.id %>").toggle(this.value == 'resource_option_yes_<%= user.id %>' && this.checked);
});