nếu hộp kiểm được chọn, hãy làm điều này


126

Khi tôi chọn một hộp kiểm, tôi muốn nó biến <p> #0099ff .

Khi tôi bỏ chọn hộp kiểm, tôi muốn hoàn tác nó.

Mã tôi có cho đến nay:

$('#checkbox').click(function(){
    if ($('#checkbox').attr('checked')) {
        /* NOT SURE WHAT TO DO HERE */
    }
}) 

1
"... khi nó không được chọn, để tắt chức năng tương tự." - chức năng được chuyển đến .click()được gọi trong sự kiện nhấp chuột. Do đó, tôi không hiểu ý của bạn là "bật" và "tắt". Nếu hộp kiểm được chọn, bạn có thể gọi hàm a(). Nhưng bạn phải viết hàm đảo ngược để gọi khi hộp kiểm không được chọn. Tôi bối rối.
jensgram

Tất nhiên, bạn có thể .bind().unbind()các sự kiện cho một yếu tố khác dựa trên trạng thái hộp kiểm. Có phải đó là những gì bạn đang theo đuổi?
jensgram

1
Xin lỗi vì spam nhưng tôi đã làm một ví dụ về những gì tôi đang nói.
jensgram

1
Tôi biết đây là một bài viết cũ, nhưng bây giờ jQuery sử dụng prop()cho mục đích mà câu hỏi này muốn sử dụng attr(); các prop()phương pháp đã không được tạo ra trở lại sau đó. Các câu trả lời về this.checkedcó lẽ vẫn còn hữu ích, tuy nhiên.
phân tích

Câu trả lời:


235

Tôi sẽ sử dụng .change()this.checked:

$('#checkbox').change(function(){
    var c = this.checked ? '#f00' : '#09f';
    $('p').css('color', c);
});

-

Khi sử dụng this.checked
Andy E đã thực hiện một bài viết tuyệt vời về cách chúng ta có xu hướng lạm dụng jQuery: Sử dụng sức mạnh tuyệt vời của jQuery để truy cập các thuộc tính của một phần tử . Bài viết đặc biệt xử lý việc sử dụng .attr("id")nhưng trong trường hợp #checkbox một <input type="checkbox" />yếu tố thì vấn đề là giống nhau cho $(...).attr('checked')(hoặc thậm chí $(...).is(':checked')) so với this.checked.


48

Thử cái này.

$('#checkbox').click(function(){
    if (this.checked) {
        $('p').css('color', '#0099ff')
    }
}) 

Đôi khi chúng ta quá mức cần thiết jquery. Nhiều thứ có thể đạt được bằng cách sử dụng jquery với javascript đơn giản.


34

Nó có thể xảy ra rằng "this.checked" luôn luôn "bật". Do đó, tôi khuyên bạn nên:

$('#checkbox').change(function() {
  if ($(this).is(':checked')) {
    console.log('Checked');
  } else {
    console.log('Unchecked');
  }
});

Trong trường hợp của tôi, tôi chỉ thay đổi $(':checkbox')để làm cho nó hoạt động;)
Pathros

21

Sẽ tốt hơn nếu bạn định nghĩa một lớp có màu khác, sau đó bạn chuyển lớp

$('#checkbox').click(function(){
    var chk = $(this);
    $('p').toggleClass('selected', chk.attr('checked'));
}) 

theo cách này, mã của bạn sạch hơn vì bạn không phải chỉ định tất cả các thuộc tính css (giả sử bạn muốn thêm đường viền, kiểu văn bản hoặc khác ...) nhưng bạn chỉ cần chuyển một lớp


4
+1 cho giải pháp chung. $('#checkbox').attr('checked')Tuy nhiên, không có lý do để làm , nếu chúng ta biết đó #checkbox một hộp kiểm (nếu không, ID khá sai lệch). this.checkedsẽ làm.
jensgram

@jensgram @fcalderan +1 Cảm ơn vì tiền boa! Tôi chưa bao giờ thấy toggleClass với chuyển đổi. Tôi đang xóa bài viết của mình vì nó vô dụng. Xin lỗi vì quá cầu kỳ, nhưng tôi nghĩ câu trả lời này sẽ hoàn hảo 100% nếu không chọn '#checkbox': có thể sử dụng $ (cái này) thay thế? Hoặc giải pháp của jensgram?
tấn công

@attack tất nhiên bạn có thể lưu trữ phần tử của mình trước khi sử dụng (xem mã ngay bây giờ).

4

Tôi đã tìm ra một giải pháp điên rồ để xử lý vấn đề này của hộp kiểm không được kiểm tra hoặc kiểm tra ở đây là thuật toán của tôi ... tạo một biến toàn cục cho phép var check_holder

check_holder có 3 tiểu bang

  1. trạng thái không xác định
  2. 0 trạng thái
  3. 1 bang

Nếu hộp kiểm được bấm,

$(document).on("click","#check",function(){
    if(typeof(check_holder)=="undefined"){
          //this means that it is the first time and the check is going to be checked
          //do something
          check_holder=1; //indicates that the is checked,it is in checked state
    }
    else if(check_holder==1){
          //do something when the check is going to be unchecked
          check_holder=0; //it means that it is not checked,it is in unchecked state
    }
     else if(check_holder==0){
            //do something when the check is going to be checked
            check_holder=1;//indicates that it is in a checked state
     }
});

Mã ở trên có thể được sử dụng trong nhiều tình huống để tìm hiểu xem hộp kiểm đã được kiểm tra hay chưa được kiểm tra. Khái niệm đằng sau nó là lưu các trạng thái hộp kiểm trong một biến, tức là khi nó bật, tắt. Tôi hy vọng logic có thể được sử dụng để giải quyết vấn đề của bạn.


1
Giải pháp thực sự điên rồ nhưng không phải là một cách tốt. Có các biến toàn cầu có thể giúp bạn giải quyết vấn đề ngay hôm nay nhưng chúng gần như chắc chắn sẽ trở thành vấn đề cho bạn vào ngày mai. Cố gắng tránh chúng khi có thể, đó là 99% thời gian. Họ làm cho không thể lý luận về mã của bạn mà không phải lo lắng về trạng thái toàn cầu. Một biến toàn cầu có thể trông vô tội nhưng nhanh chóng trở thành hàng chục rồi hàng trăm. Ở đó, thấy rằng và nó không đẹp.
bijancn

3

Kiểm tra mã này:

<!-- script to check whether checkbox checked or not using prop function -->
<script>
$('#change_password').click(function(){
    if($(this).prop("checked") == true){ //can also use $(this).prop("checked") which will return a boolean.
        alert("checked");
    }
    else if($(this).prop("checked") == false){
        alert("Checkbox is unchecked.");
    }
});
</script>

1
$('#checkbox').change(function(){
   (this.checked)?$('p').css('color','#0099ff'):$('p').css('color','another_color');
});

1

Có lẽ bạn có thể đi với mã này để thực hiện các hành động khi hộp kiểm được chọn hoặc không được chọn.

$('#chk').on('click',function(){
    if(this.checked==true){
      alert('yes');
    }else{
      alert('no');
    }
});


0

Thực hiện tối ưu

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});

Bản giới thiệu

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});
<script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
<input id="checkbox" type="checkbox" /> 
<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<p>
    Ut enim ad minim veniam, quis nostrud exercitation ullamco
    laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
    dolor in reprehenderit in voluptate velit esse cillum dolore eu
    fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est
    laborum.
</p>


0

Tại sao không sử dụng được xây dựng trong các sự kiện?

$('#checkbox').click(function(e){
    if(e.target.checked) {
     // code to run if checked
        console.log('Checked');

     } else {

     //code to run if unchecked
        console.log('Unchecked');
     }
});
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.