2013-04-17 53 views
22

Có thể kích hoạt sự kiện thay đổi trên hộp kiểm bằng javascript/jquery không?Sự kiện thay đổi kích hoạt jquery trên hộp kiểm

Something như thế này (tôi chạy triggerChange trên một nút bấm):

<label><input type="checkbox" id="chk"/>Label for chk</label> 

<script> 
function triggerChange(){ 
    $("#chk").trigger("change"); 
} 
</script> 

Khi tôi chạy đoạn mã trên tôi nhận được lỗi này: "kích hoạt không phải là một chức năng".

+2

Tất nhiên điều đó là có thể. Có lẽ bạn đã quên bao gồm jQuery. – VisioN

+0

Tôi nghĩ bạn sẽ quan tâm đến câu hỏi này: http://stackoverflow.com/questions/10159214/why-does-dynamically-changing-a-checkbox-not-trigger-a-form-change-event Don đừng quên đặt trên một bối cảnh $ (tài liệu) .ready! –

+0

Có vẻ như '$' trả về cái gì đó không phải là một đối tượng jQuery. Có nghĩa là '$' có thể không phải là jQuery? Cũng lưu ý rằng kích hoạt sự kiện thay đổi sẽ chỉ chạy trình xử lý sự kiện thay đổi, nó sẽ không thay đổi trạng thái của hộp kiểm. –

Trả lời

15

Đó trigger is not a function thông báo lỗi chỉ ra cái gì khác là lúc chơi. Theo SO câu hỏi này:

What happens when a jQuery selector wasn't found?

no.good.at.coding nói:

Do note however that you must ensure that selector is a jQuery object! Otherwise, you could get an error indicating that "trigger is not a function".

Đó là khả năng là bạn đã quên jQuery?


Để thực hiện, bạn nên sử dụng nó theo cách bạn đang sử dụng. Nhưng trigger nên được sử dụng để kích hoạt các phương thức sự kiện trên các phần tử đã được đính kèm thông qua jQuery. Kiểm tra trình diễn của tôi:

Fiddle:
Với nhấp chuột sự kiện: http://jsfiddle.net/fS4R5/1/
Nếu không có nhấp chuột sự kiện: http://jsfiddle.net/fS4R5/2/

HTML:

<label><input type="checkbox" id="chk"/>Label for chk</label> 

JS:

function triggerChange(){ 
    $("#chk").trigger("change"); 
} 

$("#chk").change(function() { 
    alert("triggered!"); 
}); 

triggerChange(); 
+0

Nếu không được đính kèm, trình duyệt sẽ không tăng kích hoạt * "không phải là chức năng" * ngoại lệ. jQuery được điều chỉnh cho nó. – VisioN

+0

Cảm ơn, đã cập nhật câu trả lời của tôi với các chi tiết liên quan đến ngoại lệ. – Jace

+0

Tôi không quan tâm đến sự kiện nhấp chuột. Tôi có lý do của tôi không sử dụng nhấp chuột. Tôi muốn kích hoạt sự kiện thay đổi mà không cần nhấp vào hộp kiểm. –

4

Trong jQuery, bạn thường có thể kích hoạt một sự kiện bằng cách gọi phương thức eventhandler với bất kỳ tham số hàm nào.

Ví dụ một handler nhấp chuột có thể được chỉ định như vậy:

$('#mything').click(function(e){dostuff});

sự kiện nhấn trong chính nó có thể được kích hoạt bằng cách đơn giản chạy: $('#mything').click();

Tôi nghi ngờ điều này có thể được thực hiện cho mỗi sự kiện hiện có trong jQuery.

+2

Bạn cũng có thể gọi nó bằng '.trigger (" click ")'. Không có gì là sai với nó. – VisioN

+0

Tôi không quan tâm đến sự kiện nhấp chuột. Tôi có lý do của tôi không sử dụng nhấp chuột. Tôi muốn kích hoạt sự kiện thay đổi mà không cần nhấp vào hộp kiểm. –

+0

Vâng, 'bấm' chỉ là một ví dụ. Bạn cũng có thể thay thế nó bằng chức năng 'thay đổi'. Để tham khảo: http://api.jquery.com/change/ –

1

Tôi nghĩ rằng phương thức ưu tiên kể từ 1.9.1 là 'bật'. Đặc biệt nếu bạn sử dụng hộp kiểm được thêm động.

Giả sử bạn có một div với id = 'divCOntent' và trên đó là một hộp kiểm với id = 'cballaut', bạn có thể làm điều này

$('#divcontent').on('click', '#cballaut', function (e) { 
        alert(this.checked); 
       }); 
+0

Điều đó hầu như không trả lời được câu hỏi. – VisioN

0

sử dụng phương pháp chống đỡ.

$('#myCheck').prop('checked', true); 
$('#myCheck').prop('checked', false); 
+0

Điều này sẽ không kích hoạt sự kiện thay đổi. – xaviert

Các vấn đề liên quan