Rails实现两级JQuery检查并取消选中父级复选框的所有子复选框

时间:2014-12-11 20:27:39

标签: jquery ruby-on-rails checkbox

尝试实现多个(父/子)复选框设置,其中“全部检查”检查所有框,并取消选中其中一个子框取消选中“全部检查”。已经在网上找到了几个解决方案但没有使用Ruby on Rails。一个看起来很有前途的解决方案是使用简单的HTML和jQuery脚本。基本HTML看起来像这样 - 在jQuery代码中引用了类以识别复选框:

<html>
   <fieldset>
        <input type="checkbox" class="parentCheckBox" /> Parent 1<br />
        <input type="checkbox" class="childCheckBox" /> Child 1-1<br />
        <input type="checkbox" class="childCheckBox" /> Child 1-2<br />
        <input type="checkbox" class="childCheckBox" /> Child 1-3<br />
        <input type="checkbox" class="childCheckBox" /> Child 1-4<br />
        <input type="checkbox" class="childCheckBox" /> Child 1-5<br />
    </fieldset>
</html>

我在Rails中生成了一个简单的脚手架来测试想法,使用父母和3个孩子。通用脚手架代码如下所示:

<fieldset>

  <div class="field">
    <%= f.label :checkall %><br>
    <%= f.check_box :checkall %>
  </div>
  <div class="field">
    <%= f.label :date_one %><br>
    <%= f.check_box :date_one %>
  </div>
  <div class="field">
    <%= f.label :date_two %><br>
    <%= f.check_box :date_two %>
  </div>
  <div class="field">
    <%= f.label :date_three %><br>
    <%= f.check_box :date_three %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 

</fieldset>

Rails API将其显示为check_box语法:

check_box(method, options = {}, checked_value = "1", unchecked_value = "0")

......并举了一个例子:

check_box("eula", "accepted", { class: 'eula_check' }, "yes", "no")
 # => <input name="eula[accepted]" type="hidden" value="no" />
 #    <input type="checkbox" class="eula_check" id="eula_accepted" name="eula[accepted]" value="yes" />  

...但我在这里抓住稻草,因为我不确定定义,语法等。试图将上面那个简单的HTML翻译成rubyspeak,我想出了这个:

<fieldset>

  <div class="parentCheckbox">
    <%= f.label :checkall %><br>
    <%= f.check_box :checkall, {class: parentCheckBox} %>
  </div>
  <div class="childCheckBox">
    <%= f.label :date_one %><br>
    <%= f.check_box :date_one, {class: childCheckBox} %>
  </div>
  <div class="childCheckBox">
    <%= f.label :date_two %><br>
    <%= f.check_box :date_two, {class: childCheckBox} %>
  </div>
  <div class="childCheckBox">
    <%= f.label :date_three %><br>
    <%= f.check_box :date_three, {class: childCheckBox} %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 

</fieldset>  

...并收到此错误:

undefined local variable or method `parentCheckBox' for #<#<Class:0xbdcb5e4>:0xc07ab8c>
Extracted source (around line #18):
15 
16 <div class="parentCheckbox">
17 <%= f.label :checkall %><br>
18 <%= f.check_box :checkall, {class: parentCheckBox} %>
19 </div>

我确信我已经离开这里了,但是API在将非常简单的HTML转换为嵌入式ruby方面帮助很小。我知道jQuery脚本可以与HTML一起使用,但是我需要提交表单的结果来提供数据库,而不仅仅是在显示器中看起来很漂亮,所以我试图不要过多地使用rails生成的代码。

忘记。

1 个答案:

答案 0 :(得分:0)

&lt;%= f.check_box:checkall,{class:'parentCheckBox'}%&gt; - 将''添加到字符串('parentCheckBox')