2012-02-07 39 views
88

Tôi có một số mãLàm cách nào để xử lý thay đổi của hộp kiểm bằng cách sử dụng jQuery?

<input type="checkbox" id="chk" value="value" /> 
<label for="chk">Value </label> 
<br/> 
<input type="button" id="But1" value="set value" /> 
<br /> 
<input type="button" id="But2" value="read checked" /> 

javascript:

$(document).ready(function() { 
    console.log("Ready ..."); 
    registerHandlers(); 

    function registerHandlers() { 
     $('#But1').click(function() { 
      $('#chk').prop('checked', !$('#chk').is(':checked')); 
     }); 
     $('#But2').click(function() { 
      var chk1 = $('#chk').is(':checked'); 
      console.log("Value : " + chk1); 
     }); 

     $('input[type="checkbox"]').change(function() { 
      var name = $(this).val(); 
      var check = $(this).prop('checked'); 
      console.log("Change: " + name + " to " + check); 
     }); 
    } 
}); 

Làm thế nào để xử lý các thay đổi của checkbox bằng jQuery? Tôi cần phải đặt trình xử lý để thay đổi bất kỳ hộp kiểm nào được chọn.

[cập nhật]

Có một hộp kiểm và một vài nút. Mỗi nút có thể thay đổi hộp kiểm. Làm cách nào để bắt sự kiện thay đổi hộp kiểm?

[Cập nhật]

tôi cần xử lý checkbox thay đổi trong ví dụ này jsfiddle. Khi tôi bấm vào hộp, thông báo "OK" nút không được hiển thị.

+0

Tôi thực sự không hiểu vấn đề của bạn? Điều gì sẽ xảy ra khi một hộp kiểm được thay đổi? – Niklas

+0

Có vấn đề gì? Mã này dường như hoạt động tốt – JaredPar

+2

Bạn có thể vui lòng thuật lại câu hỏi của mình không? Bạn đã có $ ('input [type = "checkbox"]'). Thay đổi handler, whats wrong? – Madman

Trả lời

136

Sử dụng :checkbox selector:

$(':checkbox').change(function() { 

     // do stuff here. It will fire on any checkbox change 

}); 

Code: http://jsfiddle.net/s6fe9/

+65

... và 'this.checked' này rất hữu ích để xác định thời điểm hộp kiểm được chọn hay không. – Stefan

+0

Có thể đăng ký nhiều trình xử lý không? – BILL

+0

Có, bạn có thể đăng ký bao nhiêu trình xử lý tùy thích. – Samich

15

Hope, đây sẽ là một số giúp đỡ.

$('input[type=checkbox]').change(function() { 
    if ($(this).prop("checked")) { 
     //do the stuff that you would do when 'checked' 

     return; 
    } 
    //Here do the stuff you want to do when 'unchecked' 
}); 
+6

như của jQuery 1.6, tốt hơn để sử dụng $ (this) .prop ("checked"), vì nó sẽ thay đổi động với trạng thái thực tế của hộp kiểm. – hrabinowitz

+3

.attr ("đã chọn") không chính xác, vì nó không được cập nhật khi người dùng nhấp. Tôi xác nhận nhận xét của @ hrabinowitz. – Adrien

+0

@hrabinowitz trả lời cập nhật –

49

Bạn có thể sử dụng Id của lĩnh vực này cũng

$('#checkbox1').change(function() { 
    if($(this).is(":checked")) { 
     //'checked' event code 
     return; 
    } 
    //'unchecked' event code 
}); 
1
$('#myForm').on('change', 'input[type=checkbox]', function() { 
    this.checked ? this.value = 'apple' : this.value = 'pineapple'; 
}); 
+3

Vui lòng giải thích câu trả lời của bạn: các giải pháp chỉ mã có nhiều khả năng bị xóa hơn, vì chúng không giải thích, chỉ cần sửa (nếu có). – rekaszeru

+0

Xin lỗi @rekaszeru Tôi sẽ làm tốt hơn lần sau –

6
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) { 

     //do your stuff 

    } 
}); 
+0

Vui lòng kiểm tra mã của riêng bạn hoạt động trước khi đăng. Có vấn đề rõ ràng với bộ chọn của bạn ... – Jonathan

+0

live() không được chấp nhận. – guettli

0

Dường như với tôi removeProp không hoạt động đúng trong Chrome: jsfiddle

 $('#badBut1').click(function() { 
     checkit('Before'); 
     if($('#chk').prop('checked')) 
     { 
      $('#chk').removeProp('checked'); 
     }else{ 
      $('#chk').prop('checked', true); 
     } 
     checkit('After'); 
    }); 
    $('#But1').click(function() { 
     checkit('Before'); 
     if($('#chk').prop('checked')) 
     { 
      $('#chk').removeClass('checked').prop('checked',false); 
     }else{ 
      $('#chk').addClass('checked').prop('checked', true); 
     } 
     checkit('After'); 
    }); 

    $('#But2').click(function() { 
     var chk1 = $('#chk').is(':checked'); 
     console.log("Value : " + chk1); 
    }); 

    $('#chk').on('change',function() { 
     checkit('Result'); 
    }); 
    function checkit(moment) { 
     var chk1 = $('#chk').is(':checked'); 
     console.log(moment+", value = " + chk1); 
    }; 
+0

Cách chuyển đổi hộp kiểm không có sự kiện (từ bên ngoài): http://jsfiddle.net/k91k0sLu/1/ –

0

nhận giá trị radio theo name

$('input').on('className', function(event){ 
     console.log($(this).attr('name')); 
     if($(this).attr('name') == "worker") 
      { 
       resetAll();     
      } 
    }); 
Các vấn đề liên quan