Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在加载时检查数字或复选框?_Javascript_Jquery_Ruby On Rails_Ruby - Fatal编程技术网

Javascript 如何在加载时检查数字或复选框?

Javascript 如何在加载时检查数字或复选框?,javascript,jquery,ruby-on-rails,ruby,Javascript,Jquery,Ruby On Rails,Ruby,我想检查加载时选中了多少复选框,并且不允许超过特定数量的复选框 我有以下表格: <div id="checkbox" class=""> <%= form.collection_check_boxes(:category_ids, Category.all, :id, :name, :multiple => true) do |c| %> <%= c.label class:"form-check-inline" do %>

我想检查加载时选中了多少复选框,并且不允许超过特定数量的复选框

我有以下表格:

<div id="checkbox" class="">
   <%= form.collection_check_boxes(:category_ids, Category.all, :id, :name, :multiple => true) do |c| %>
      <%= c.label class:"form-check-inline" do %>
        <%= c.check_box + c.text %>
      <% end %>
   <% end %>
</div>
<script>
  $(document).on('turbolinks:load', function(){
      $('#checkbox input:checkbox').change(function () {
      var $cs=$('#checkbox input:checkbox:checked');
      if ($cs.length >= 4) {
        $('#checkbox input:checkbox:not(:checked)').attr("disabled", true);
      }
      else{
        $('#checkbox input:checkbox').attr("disabled", false);
      }
      });
    });
</script>

这是可能的还是唯一的选项?

您可以通过触发其中一个复选框上的事件来消除重复:

 $(document).on('turbolinks:load', function(){
      $('#checkbox input:checkbox').change(function () {
          // business logic

         // now trigger event on first checkbox
      }).first().change()
 })
或者,将所有业务逻辑包装在一个命名函数中,并在页面加载时调用它,并将其作为引用传递给更改事件侦听器

function updateCheckboxes() {
  var $cs = $('#checkbox input:checkbox:checked');
  if ($cs.length >= 4) {
    $('#checkbox input:checkbox:not(:checked)').attr("disabled", true);
  } else {
    $('#checkbox input:checkbox').attr("disabled", false);
  }
}

$(document).on('turbolinks:load', function() {
  updateCheckboxes();
  $('#checkbox input:checkbox').change(updateCheckboxes)
})
function updateCheckboxes() {
  var $cs = $('#checkbox input:checkbox:checked');
  if ($cs.length >= 4) {
    $('#checkbox input:checkbox:not(:checked)').attr("disabled", true);
  } else {
    $('#checkbox input:checkbox').attr("disabled", false);
  }
}

$(document).on('turbolinks:load', function() {
  updateCheckboxes();
  $('#checkbox input:checkbox').change(updateCheckboxes)
})