2011-07-29 29 views
47

Tôi cần biết khi nào bất kỳ hộp kiểm nào trên trang được chọn:Cách nghe khi hộp kiểm được chọn trong Jquery

ví dụ:

<input type="checkbox"> 

tôi đã cố gắng này trong Jquery

$('input type=["checkbox"]').change(function(){ 
alert('changed'); 
}); 

Nhưng nó đã không làm việc, bất kỳ ý tưởng?

+0

vấn đề này ở đây là '$ ('input type = [ "checkbox"]')' không phải là một chọn hợp lệ. Nó phải là '$ ('input [type = checkbox]')' thay thế. Thậm chí tốt hơn mặc dù sẽ là '$ ('input: checkbox')'. ;) – CptRobby

Trả lời

10
$('input:checkbox').change(function(){ 
    if($(this).is(':checked')){ 
     alert('Checked'); 
    } 
}); 

Here is a demo

0
$("input[type='checkbox']").click(function(){ 
    alert("checked"); 
}); 

Chỉ cần một bình thường .click sẽ làm.

19
$('input:checkbox').live('change', function(){ 
    if($(this).is(':checked')){ 
     alert('checked'); 
    } else { 
     alert('un-checked'); 
    } 
}); 

jsfiddle: http://jsfiddle.net/7Zg3x/1/

+0

Tại sao '.live'? Tại sao không '.click'? – dotty

+7

Vì tôi không biết làm thế nào/khi phần tử đầu vào được thêm vào dom, sử dụng .live() cho các ví dụ giúp chúng có liên quan ngay cả khi phần tử động của phần tử đang xảy ra. Theo nghĩa chung, .live() sẽ áp dụng cho các phần tử "bây giờ và trong tương lai" (như các tài liệu đã đặt nó) và .click() là một phím tắt cho .bind ('click', function() {}) chỉ áp dụng cho các yếu tố đã có trong dom. – Jasper

+1

@Jasper: 'live' là cách chậm hơn so với ràng buộc thông thường, bởi vì sự kiện sẽ phát sinh. Nó có ý nghĩa hơn nhiều khi sử dụng sự kiện 'change' được liên kết trực tiếp với phần tử, nếu sau đó là một phần tử tĩnh. – Shef

84

Sử dụng sự kiện change()is() kiểm tra:

$('input:checkbox').change(
    function(){ 
     if ($(this).is(':checked')) { 
      alert('checked'); 
     } 
    }); 

Tôi đã cập nhật ở trên, theo sau, vì sự phụ thuộc ngớ ngẩn của tôi trên jQuery (trong if) khi các thuộc tính DOM sẽ phù hợp như nhau và cũng rẻ hơn để sử dụng. Cũng chọn đã được thay đổi, để cho phép nó được thông qua, trong những trình duyệt có hỗ trợ nó, để document.querySelectorAll() phương pháp của DOM:

$('input[type=checkbox]').change(
    function(){ 
     if (this.checked) { 
      alert('checked'); 
     } 
    }); 

Đối với mục đích hoàn chỉnh, điều tương tự cũng có thể dễ dàng có thể trong đồng bằng JavaScript:

var checkboxes = document.querySelectorAll('input[type=checkbox]'), 
    checkboxArray = Array.from(checkboxes); 

function confirmCheck() { 
    if (this.checked) { 
    alert('checked'); 
    } 
} 

checkboxArray.forEach(function(checkbox) { 
    checkbox.addEventListener('change', confirmCheck); 
}); 

Tài liệu tham khảo:

+0

Bạn có thể đảm bảo rằng sự kiện thay đổi sẽ chỉ được kích hoạt khi thay đổi trạng thái kiểm tra, chứ không phải những sự kiện khác như hiển thị, v.v.? – committedandroider

+0

@committedandroider: "* [Tôi có thể đảm bảo ...? *" - không, nhưng tôi chắc chắn sẽ nói rằng tôi chưa bao giờ có sự kiện thay đổi cho bất kỳ điều gì khác ngoài tương tác của người dùng với hộp kiểm hoặc phần tử '

2

Hãy thử

$('input:checkbox').change(function(){ 
    if(this.checked) 
     alert('checked'); 
    else 
     alert('not checked'); 
}); 
Các vấn đề liên quan