2009-07-31 73 views

Trả lời

4

jquery (EDITED để chuyển séc/bỏ chọn tất cả):

$(document).ready(function() { 
    $("#toggleAll").click(function() { 
     $("#chex :checkbox").attr("checked", $(this).attr("checked")); 
    });  
}); 

Lý do tại sao tôi phải làm một click() sau đó kiểm tra cho checked tình trạng là bởi vì nếu bạn cố gắng "toggle" một ô trống, hộp kiểm đang được bật sẽ không giữ lại trạng thái đã kiểm tra của nó. Bằng cách này, nó giữ trạng thái kiểm tra và chuyển đổi hiệu quả.

HTML:

<input type="checkbox" id="toggleAll" /> 
<div id="chex"> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
</div> 
+0

Những trông giống như ASP.NET hộp kiểm, không ASP.NET-MVC. MVC sẽ chỉ sử dụng các hộp kiểm html thông thường. Làm thế nào mà thay đổi mọi thứ? – KingNestor

+0

Với giải pháp này, nếu người dùng bỏ chọn hộp kiểm 'chọn tất cả', các hộp sẽ được chọn. Xem câu trả lời của tôi bên dưới để jQuery xử lý việc chọn VÀ bỏ chọn tất cả các hộp. – idrumgood

+0

@kingnestor - nó sẽ không thay đổi bất cứ điều gì. sử dụng hộp kiểm tiêu chuẩn của bạn và điều này sẽ hoạt động. – Jason

1

Trong khi các câu trả lời được đăng trước đó sẽ hoạt động, bạn sẽ gặp sự cố nếu bạn có nhiều bộ hộp kiểm trong một trang.

Định dạng này sẽ làm việc bất kể:

<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" /></th> 
      <th>Column 1</th> 
      <th>Column 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 1</td> 
      <td>Tabular Data 2</td> 
     </tr> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 3</td> 
      <td>Tabular Data 4</td> 
     </tr> 
    </tbody> 
</table> 

và kịch bản ...

$(function() { 
    $('th > :checkbox').click(function() { 
     $(this).closest('table') 
      .find('td > :checkbox') 
      .attr('checked', $(this).is(':checked')); 
    }); 
}); 
+0

đó là cách jquery hơn là cần thiết. tôi sẽ làm việc bất kể định dạng miễn là các bộ chọn thích hợp được thêm vào – Jason

+1

@ Jason: Tôi chắc chắn đồng ý với hiệu ứng tương tự có thể được thực hiện với mã ít hơn nhưng không phân biệt, phương pháp được hiển thị trong câu trả lời của tôi sẽ cho phép nhiều bộ kiểm tra tồn tại trong một trang. – dcharles

1

Hơi sửa đổi đánh dấu câu trả lời từ Marve của (cho ID để bàn)

Working Demo →

EDIT:

Phiên bản cập nhật trong đó hộp kiểm 'selectAll' phản ánh chính xác trạng thái của hộp kiểm. Ví dụ. nếu bạn chọn tất cả hộp kiểm theo cách thủ công, hãy chọnTất cả hộp kiểm sẽ tự động được chọn. Thử bản demo để hiểu hành vi.

Code:

<table id='myTable'> 
    <thead> 
     <tr> 
      <th><input type="checkbox" /></th> 
      <th>Column 1</th> 
      <th>Column 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 1</td> 
      <td>Tabular Data 2</td> 
     </tr> 
     <tr> 
      <td><input type="checkbox" /></td> 
      <td>Tabular Data 3</td> 
      <td>Tabular Data 4</td> 
     </tr> 
    </tbody> 
</table> 

jQuery của bạn có thể đơn giản như thế này:

$(document).ready(
    function() 
    { 
     $('#myTable th input:checkbox').click(
      function() 
      { 
       $('#myTable td input:checkbox').attr('checked', $(this).attr('checked')); 
      } 
     ); 

     //The following code keeps the 'selectAll' checkbox in sync with 
     //the manual selection of the checkboxes by user. This is an additional usability feature. 
     $('#myTable tr input:checkbox').click(
      function() 
      { 
       var checkedCount = $('#myTable td input:checkbox:checked').length; 
       var totalCount = $('#myTable td input:checkbox').length; 
       $('#myTable th input:checkbox').attr('checked', checkedCount === totalCount); 
      } 
     ); 
    } 
); 
+0

Tôi thích Yogi! Điều này thật đúng với gì mà tôi đã tìm kiếm!!! – longda

+0

Giống như bình luận của tôi ở trên ... điều này đã không làm việc cho tôi cho đến khi tôi đặt một không gian trước khi ": kiểm tra" chọn. – longda

10

này sẽ giữ tất cả các hộp kiểm cá nhân giống như "rà soát tất cả" một

$("#id-of-checkall-checkbox").click(function() { 
    $(".class-on-my-checkboxes").attr('checked', this.checked); 
}); 

Điều này sẽ giữ "kiểm tra tất cả" một đồng bộ hóa với việc các hộp kiểm riêng lẻ có thực sự là c hecked or not

$(".class-on-my-checkboxes").click(function() { 
    if (!this.checked) { 
     $("#id-of-checkall-checkbox").attr('checked', false); 
    } 
    else if ($(".class-on-my-checkboxes").length == $(".class-on-my-checkboxes:checked").length) { 
     $("#id-of-checkall-checkbox").attr('checked', true); 
    } 
}); 
+0

Điều này giống như trường hợp khác nếu trường hợp không hoạt động ... cần đặt hộp kiểm kiểm tra thành true khi tất cả các hộp kiểm phụ được chọn. Bất kỳ ý tưởng? – longda

+0

Tôi nghĩ rằng tôi đã tìm ra ... thêm một dấu cách trước khi ": kiểm tra" và nó hoạt động. – longda

0

Hãy thử điều này Đối với bảng HTML.

<table class="rptcontenttext" style="width: 100%; border-style: solid; border-collapse: collapse" 
     border="1px" cellpadding="0" cellspacing="0"> 
     <thead> 
      <tr> 
      <th style="text-align:left;width:10px;"> 
      <input type="checkbox" value="true" name="chkVerifySelection" id="chkVerifySelection" onchange="return  checkAllVerifySelection();" /> 
      </th> 
      <td class="rptrowdata" align="left"> 
       Employee ID 
      </td> 
      </tr> 
     </thead> 
     <tbody style="overflow-y: auto; overflow-x: hidden; max-height: 400px; width: 100%;"> 
      @for (int i = 0; i < Model.EmployeeInformationList.Count; i++) 
      {  
      <tr> 
      <td style="width:10px">  
       @{ 
       if (Model.EmployeeInformationList[i].SelectStatus==true) 
       { 
       @Html.CheckBoxFor(model => model.EmployeeInformationList[i].SelectStatus, new { @class = "VerifyStatus" ,disabled =     "disabled",@checked="checked" }) 
       } 
       else 
        { 
        @Html.CheckBoxFor(model => model.EmployeeInformationList[i].SelectStatus, new { @class = "VerifyStatus" }) 
        } 
       }   
      </td>    
      <td class="rptrowdata" align="left" style="width: 70px"> 

       @Html.Encode(Model.EmployeeInformationList[i].StrEmpID) 

      </td> 
       <td class="rptrowdata" align="center" style="width: 50px"> 
       @Html.HiddenFor(m=>m.EmployeeInformationList[i].strEmpOldCardNo) 
       @Html.Encode(Model.EmployeeInformationList[i].strEmpOldCardNo) 
      </td> 
      </tr> 
      } 
     </tbody> 
     </table> 

Script:

function checkAllVerifySelection() { 
    var flag = $('input[name=chkVerifySelection]').is(':checked'); 
    if (flag) { 
     $(".VerifyStatus").each(function() { 
     $(this).attr('checked', true); 
     }); 
    } 
    else { 
     $(".VerifyStatus").each(function() { 
     $(this).attr('checked', false); 
     }); 
    } 
    return true; 
    } 
Các vấn đề liên quan