Jquery在rails 4 app中不使用方括号

时间:2015-08-31 16:52:46

标签: jquery

我看过这些帖子: 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();
  }
});                   

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:0)

分隔搜索值转义元字符但不能同时。因此,使用:

$("input:radio[name='resource[option]']")....

或者:

$("input:radio[name=resource\\[option\\]]")....

&#13;
&#13;
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;
&#13;
&#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);
});