Rails通过jquery从所有复选框获取状态并将其发送给控制器

Rails通过jquery从所有复选框获取状态并将其发送给控制器,jquery,ruby-on-rails,ajax,checkbox,Jquery,Ruby On Rails,Ajax,Checkbox,到目前为止,我有以下设置: 我的复选框声明如下: <label id="cb2" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="checkbox-1"> <input type="checkbox" id="checkbox-1" class="mdl-checkbox__input"> <span class="mdl-checkbox__label">Mea

到目前为止,我有以下设置:

我的复选框声明如下:

<label id="cb2" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="checkbox-1">
     <input type="checkbox" id="checkbox-1" class="mdl-checkbox__input">
     <span class="mdl-checkbox__label">Meal</span>
</label>
<script>
 $(document).ready(function() {
 $("input[type='checkbox']").change(function() {
   var selected_checkbox_val = [];
    $("input[type='checkbox']").each(function() {
        if ( this.checked ) {
            selected_checkbox_val.push(this.getAttribute("name"));
        }
    });
    $.ajax({
      url: "/meals/dynamic_test",
      type: "POST",
      data: { 
        value: selected_checkbox_val
      },
      dataType: 'script'  
    });
   });
 });
</script>

一餐
我有以下JQuery代码:

<script>
   $(document).ready(function() {
   $("input[type='checkbox']").change(function() {
       $("#change_me").html("<%= j render(partial: 'dynamic_test') %>");
     });
   });
</script>

$(文档).ready(函数(){
$(“输入[type='checkbox']”)。更改(函数(){
$(“#change_me”).html(“”);
});
});
因此,只要我选中或取消选中一个复选框,我就想得到所有复选框的check属性并将它们发送到我的控制器(ajax?),然后我想在那里执行一些select查询并在“dynamic_test”中呈现它。有人能给我一个想法,如何实现数据发送到我的控制器

编辑:

My_dynamic_test.html.erb包含:

Some Test!
<%= @check_box_val %>
一些测试!
编辑2:

我让它像这样工作:

<label id="cb2" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="checkbox-1">
     <input type="checkbox" id="checkbox-1" class="mdl-checkbox__input">
     <span class="mdl-checkbox__label">Meal</span>
</label>
<script>
 $(document).ready(function() {
 $("input[type='checkbox']").change(function() {
   var selected_checkbox_val = [];
    $("input[type='checkbox']").each(function() {
        if ( this.checked ) {
            selected_checkbox_val.push(this.getAttribute("name"));
        }
    });
    $.ajax({
      url: "/meals/dynamic_test",
      type: "POST",
      data: { 
        value: selected_checkbox_val
      },
      dataType: 'script'  
    });
   });
 });
</script>

$(文档).ready(函数(){
$(“输入[type='checkbox']”)。更改(函数(){
所选的var_复选框_val=[];
$(“输入[type='checkbox']”)。每个(函数(){
如果(选中此项){
选中复选框值推送(this.getAttribute(“name”));
}
});
$.ajax({
url:“/fends/dynamic_test”,
类型:“POST”,
数据:{
值:选中的复选框值
},
数据类型:“脚本”
});
});
});

如果你能找到更好的方法,我愿意改变。

你应该这样做

<script>
$("input[type='checkbox']").change(function() {
  var selected_checkbox_val = $(this).val();
  $.ajax({
    url: "/meals/dynamic_test",
    type: "POST",
    data: { 
      value: selected_checkbox_val
    },
    dataType: 'script'  
  });
}
</script>
您应该有一个名为
dynamic_test.js.erb
的文件,其中包含以下代码

$("#change_me").html("<%= j render(partial: 'dynamic_test', locals: {check_box_val: @check_box_val}) %>");
注:


您可以更改部分的名称,以避免主模板和部分模板之间的混淆。

您希望将它们发送到哪个控制器操作?发送到“膳食控制器动态测试”,因为这是我希望在“渲染部分”之后显示的内容。确定。我有答案给你!谢谢你的回答。但我无法理解@check_box_val。它唯一的内容是“开”,但我需要知道哪个复选框有什么值。@Maxung您的
动态测试
部分包含什么?请在问题中分享我是否需要遍历页面上的所有复选框,将它们写入数组,然后通过ajax发送?@Maxung Yes!这可以让事情变得更简单,因为我们可以通过它的索引跟踪复选框。“某些测试![“打开”、“打开”、“打开”]”即使只选中了最后一个复选框。我认为它必须做点什么。val()但是我找不到其他函数。