jQuery - hộp kiểm bật / tắt


234

Tôi có một loạt các hộp kiểm như thế này. Nếu hộp kiểm "Kiểm tra tôi" được chọn, tất cả 3 hộp kiểm khác sẽ được bật, nếu không chúng sẽ bị tắt. Làm thế nào tôi có thể làm điều này bằng cách sử dụng jQuery?

<form name="frmChkForm" id="frmChkForm">
<input type="checkbox" name="chkcc9">Check Me
<input type="checkbox" name="chk9[120]">
<input type="checkbox" name="chk9[140]">
<input type="checkbox" name="chk9[150]">
</form>

Câu trả lời:


413

Thay đổi đánh dấu của bạn một chút:

$(function() {
  enable_cb();
  $("#group1").click(enable_cb);
});

function enable_cb() {
  if (this.checked) {
    $("input.group1").removeAttr("disabled");
  } else {
    $("input.group1").attr("disabled", true);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="frmChkForm" id="frmChkForm">
  <input type="checkbox" name="chkcc9" id="group1">Check Me <br>
  <input type="checkbox" name="chk9[120]" class="group1"><br>
  <input type="checkbox" name="chk9[140]" class="group1"><br>
  <input type="checkbox" name="chk9[150]" class="group1"><br>
</form>

Bạn có thể thực hiện việc này bằng cách sử dụng các bộ chọn thuộc tính mà không cần giới thiệu ID và các lớp nhưng nó chậm hơn và (imho) khó đọc hơn.


3
Đối với phần vô hiệu hóa, hãy thử url này: jquery-howto.blogspot.com/2008/12/ Khăn
Walt Stoneburner

3
Điều này không liên quan trực tiếp đến câu hỏi, nhưng trong IE, sự kiện thay đổi sẽ không kích hoạt cho đến khi hộp kiểm mất tiêu điểm. Tôi thường gọi $(this).changevào sự kiện nhấp của hộp kiểm đầu tiên.
mcrumley

10
bạn có thể sử dụng .prop()thay vì .attr().
Reza Owliaei

5
Tôi gặp vấn đề với .prop (), nó hoạt động trên tập ban đầu, nhưng nếu tôi bật lại, lần thứ hai nó không thể "vô hiệu hóa" hộp kiểm. Tôi bị mắc kẹt với attr ().
ProVega


100

Đây là giải pháp cập nhật nhất.

<form name="frmChkForm" id="frmChkForm">
    <input type="checkbox" name="chkcc9" id="group1" />Check Me
    <input type="checkbox" name="chk9[120]" class="group1" />
    <input type="checkbox" name="chk9[140]" class="group1" />
    <input type="checkbox" name="chk9[150]" class="group1" />
</form>

$(function() {
    enable_cb();
    $("#group1").click(enable_cb);
});

function enable_cb() {
    $("input.group1").prop("disabled", !this.checked);
}

Dưới đây là chi tiết sử dụng cho .attr().prop() .

jQuery 1.6+

Sử dụng .prop()chức năng mới :

$("input.group1").prop("disabled", true);
$("input.group1").prop("disabled", false);

jQuery 1.5 trở xuống

Các .prop()chức năng không có sẵn, vì vậy bạn cần phải sử dụng.attr() .

Để tắt hộp kiểm (bằng cách đặt giá trị của thuộc tính bị tắt), hãy làm

$("input.group1").attr('disabled','disabled');

và để cho phép (bằng cách loại bỏ hoàn toàn thuộc tính), hãy làm

$("input.group1").removeAttr('disabled');

Mọi phiên bản của jQuery

Nếu bạn đang làm việc chỉ với một yếu tố, nó sẽ luôn được sử dụng nhanh nhất DOMElement.disabled = true. Lợi ích của việc sử dụng .prop()và các .attr()chức năng là chúng sẽ hoạt động trên tất cả các yếu tố phù hợp.

// Assuming an event handler on a checkbox
if (this.disabled)

ref: Đặt "kiểm tra" cho hộp kiểm với jQuery?


2
Đối với những người đang sử dụng asp: CheckBox như tôi, nó hiển thị trong trình duyệt dưới dạng đầu vào trong một khoảng. Vì vậy, trong trường hợp của tôi, tôi đã phải truy cập nó bằng jQuery dưới dạng $ ('. BoxClassName input'). Prop ('bị vô hiệu hóa', sai) ... và cố gắng thay đổi 'đã bật' cũng không hiệu quả với tôi :) Cảm ơn cho câu trả lời này!
deebs

10
<form name="frmChkForm" id="frmChkForm">
<input type="checkbox" name="chkcc9" id="chkAll">Check Me
<input type="checkbox" name="chk9[120]" class="chkGroup">
<input type="checkbox" name="chk9[140]" class="chkGroup">
<input type="checkbox" name="chk9[150]" class="chkGroup">
</form>

$("#chkAll").click(function() {
   $(".chkGroup").attr("checked", this.checked);
});

Với chức năng được thêm vào để đảm bảo kiểm tra tất cả các hộp kiểm được kiểm tra / kiểm tra lại nếu tất cả các hộp kiểm riêng lẻ được chọn:

$(".chkGroup").click(function() {
  $("#chkAll")[0].checked = $(".chkGroup:checked").length == $(".chkGroup").length;
});

1

Đây là một mẫu khác sử dụng JQuery 1.10.2

$(".chkcc9").on('click', function() {
            $(this)
            .parents('table')
            .find('.group1') 
            .prop('checked', $(this).is(':checked')); 
});

1

$(document).ready(function() {
  $('#InventoryMasterError').click(function(event) { //on click
    if (this.checked) { // check select status
      $('.checkerror').each(function() { //loop through each checkbox
        $('#selecctall').attr('disabled', 'disabled');
      });
    } else {
      $('.checkerror').each(function() { //loop through each checkbox
        $('#selecctall').removeAttr('disabled', 'disabled');
      });
    }
  });

});

$(document).ready(function() {
  $('#selecctall').click(function(event) { //on click
    if (this.checked) { // check select status
      $('.checkbox1').each(function() { //loop through each checkbox
        $('#InventoryMasterError').attr('disabled', 'disabled');
      });

    } else {
      $('.checkbox1').each(function() { //loop through each checkbox
        $('#InventoryMasterError').removeAttr('disabled', 'disabled');
      });
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="selecctall" name="selecctall" value="All" />
<input type="checkbox" name="data[InventoryMaster][error]" label="" value="error" id="InventoryMasterError" />
<input type="checkbox" name="checkid[]" class="checkbox1" value="1" id="InventoryMasterId" />
<input type="checkbox" name="checkid[]" class="checkbox1" value="2" id="InventoryMasterId" />


0

$jQuery(function() {
  enable_cb();
  jQuery("#group1").click(enable_cb);
});

function enable_cb() {
  if (this.checked) {
    jQuery("input.group1").removeAttr("disabled");
  } else {
    jQuery("input.group1").attr("disabled", true);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="frmChkForm" id="frmChkForm">
  <input type="checkbox" name="chkcc9" id="group1">Check Me <br>
  <input type="checkbox" name="chk9[120]" class="group1"><br>
  <input type="checkbox" name="chk9[140]" class="group1"><br>
  <input type="checkbox" name="chk9[150]" class="group1"><br>
</form>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.