简体   繁体   English

全选/取消全选页面中的复选框

[英]Select All/Deselect All checkboxes in a page

I've looked at this which seems to have no effect on my code.我看这个,这似乎对我的代码没有任何影响。 I've tried this which seems to only affect the first checkbox, but doesn't uncheck the checkbox when i click it again anyway.... I've also seen some other ways of doing it that I'm not certain are entirely Rails-esque (or whatever the term should be).我试过这个似乎只影响第一个复选框,但是当我再次单击它时不会取消选中该复选框......我还看到了其他一些我不确定的方法Rails-esque(或任何术语应该是)。

So, could someone please point me in the right direction?那么,有人可以指出我正确的方向吗?

Here is my view:这是我的观点:

<%= render 'admin/distributions/head' %>
<% title 'Workflow' %>


<%= form_for @search, :url => url_for(:controller => params[:controller], :action => params[:action]), :html => {id => "distribution_workflow",:method => :get} do |f| %>

  <div class="opportunity-block yellow">

    <div class="form-block mrl mbm">
      <%= f.label :created_at_gt, "Created at >" %>
      <%= f.text_field :created_at_gt, :class => "js-db-date-picker" %>
    </div>

    <div class="form-block mrl mbm">
      <%= f.label :created_at_lte, "Created at <=" %>
      <%= f.text_field :created_at_lte, :class => "js-db-date-picker" %>
    </div>

    <div class="form-block mrl mbm mtm">
      <%= f.label :status_equal, "Status" %>
      <%= f.select :status_equal, %w(delivered no_success already_registered qa_complete success follow_up), :include_blank => " " %>
    </div>

    <div class="clear"></div>
    <%= submit_tag 'Apply Filter', :class => "input-button dark unit-right mrl" %>
    <div class="clear"></div>
  </div>
<% end  %>


<%= form_tag edit_multiple_admin_distributions_workflows_path , :id => "workflow_form" do %>
<%= submit_tag "Edit Selected" %>
  <table class="standard-grid"> 
    <tr> 
      <th class="first"> </th>
      <th>ID</th>
      <th>Customer</th>
      <th>Resume URL</th>
      <th>Partner</th>
      <th>Status</th>
      <th>Assigned To</th>
      <th>Comments</th>
    </tr>
    <% @report.each do |distribution| %>
      <tr>
        <td><%= check_box_tag "distribution_ids[]", distribution.id %></td>
        <td>
          <%= distribution.owner.id %>
        </td>
        <td>
          <%=link_to distribution.owner.full_name, "mailto:#{distribution.owner.email}" %>
        </td>
        <td>
          <a href=<% UrlService.download_blob_url(distribution.resume) %>>Resume URL</a>
        </td>
        <td>
          <%=link_to distribution.matching_profile.partner.title,  "mailto:#{distribution.matching_profile.partner.email}" %>
        </td>
        <td>
          <%= distribution.status %>
        </td>
        <td>
          <%= distribution.assignee_id ? User.find(distribution.assignee_id).full_name : " " %>
        </td>
        <td>
          <%= distribution.comments %>
        </td>
      </tr>
    <% end %>
  </table>
<% end %>

Here's a working example for you: http://jsfiddle.net/wYPWL/这是您的工作示例: http : //jsfiddle.net/wYPWL/

HTML example: HTML 示例:

<input type="checkbox" id="selectAll" value="selectAll"> Select / Deselect All<br/><br/>

<input type="checkbox" name="foo" value="bar1"> Bar 1<br/>
<input type="checkbox" name="foo" value="bar2"> Bar 2<br/>
<input type="checkbox" name="foo" value="bar3"> Bar 3<br/>
<input type="checkbox" name="foo" value="bar4"> Bar 4<br/>

Javascript: Javascript:

$('#selectAll').click(function() {
   if (this.checked) {
       $(':checkbox').each(function() {
           this.checked = true;                        
       });
   } else {
      $(':checkbox').each(function() {
           this.checked = false;                        
       });
   } 
});

This will work regardless of what your checkboxes are named.无论您的复选框名称如何,这都将起作用。 If you really wanted to target only your checkboxes shown in your code above, you can replace $(':checkbox') with $('input[id^="distribution_ids"]') which is jQuery's way of targeting input elements that have an ID that starts with distribution_ids如果您真的只想定位上面代码中显示的复选框,则可以将$(':checkbox')替换$(':checkbox') $('input[id^="distribution_ids"]') ,这是 jQuery 定位具有以distribution_ids开头的 ID

If using jquery, you can use the following (coffeeScript):如果使用 jquery,您可以使用以下 (coffeeScript):

if (this.checked)
  $(':checkbox').each ->
    $(this).prop('checked', true)                     
else
  $(':checkbox').each ->
    $(this).prop('checked', false)

I found an issue trying to set this.checked = false - not really sure what was happening, but the above code worked.我在尝试设置 this.checked = false 时发现了一个问题 - 不太确定发生了什么,但上面的代码有效。

I have found an issue with iWasRobbed 's Answer that if Select All is checked and then if you unchecked any one option like ( Bar1 , Bar2 , Bar3 ) then Select All must be unchecked...我发现有一个问题iWasRobbed的回答是,如果Select All选中,然后如果你喜欢未选中(任何一种选择Bar1Bar2Bar3 ),然后Select All必须取消选中...

Here is Solution..这是解决方案..

HTML Code HTML代码

<input id="campaign_range_ids_1" class="checkbox" type="checkbox" value="1" name="campaign[range_ids][]"> India
<input id="campaign_range_ids_2" class="checkbox" type="checkbox" value="2" name="campaign[range_ids][]"> London
<input id="campaign_range_ids_3" class="checkbox" type="checkbox" value="3" name="campaign[range_ids][]"> USA
<input id="campaign_range_ids_4" class="checkbox" type="checkbox" value="4" name="campaign[range_ids][]"> All

JavaScript Code: JavaScript 代码:

$('#campaign_range_ids_4').click(function () {

    if ($(this).is(':checked')) {
        $('#campaign_range_ids_1,#campaign_range_ids_2,#campaign_range_ids_3').prop('checked', true);

    } else {
        $('#campaign_range_ids_1,#campaign_range_ids_2,#campaign_range_ids_3').prop('checked', false);
    }

});

$('#campaign_range_ids_1,#campaign_range_ids_2,#campaign_range_ids_3').click(function () {

    if ($(this).is(':checked')) {
        } else {
            $('#campaign_range_ids_4').prop('checked', false);
    }

});

Working Demo工作演示

In case you want to select-all for multiple separate lists on the same page如果您想为同一页面上的多个单独列表全选

$("input[data-select-all]").on("click", function() {
    let $checkboxes = $("input[data-"+$(this).data("select-all")+"]");
    if (this.checked) {
        $checkboxes.each(function() {
            this.checked = true;
        });
    } else {
        $checkboxes.each(function() {
            this.checked = false;
        });
    }
});


<table>
  <thead>
  <tr>
    <th><input type="checkbox" name="selected" id="select-all" value="1" title="Select all" data-select-all="select-all-target"></th>
    <th>Asset</th>
    <th>Description</th>
  </tr>
  </thead>
  <tbody>
    <tr>
    <td><span class="form-check"><input type="checkbox" name="selected" id="asset_type_11" value="1" data-select-all-target="true"></span></td>
    <td>The name</td>
    <td>The description</td>
    </tr>
  </tbody>
</table>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM