Thay đổi .prop bằng jQuery không kích hoạt sự kiện .change


125

Tôi đã có một người nghe sự kiện trên một hộp kiểm:

<input type="checkbox" name="something">

Người nghe sự kiện của tôi:

$('input[type="checkbox"][name="something"]').change(function() { 
    //DO SOMETHING 
});

Tôi có một trình lắng nghe sự kiện khác thay đổi .prophộp kiểm:

$('#button').click(function() { 
    $('input[type="checkbox"][name="something"]').prop("checked", false);
});

Khi tôi kiểm tra các DO SOMETHINGkích hoạt hộp kiểm . Khi tôi nhấp vào #button, các .propthay đổi và tôi thấy hộp kiểm bỏ qua trực quan, nhưng DO SOMETHINGkhông được kích hoạt ...

Một cái gì đó tôi đang nhìn?


Câu trả lời:


196

Sự kiện thay đổi được kích hoạt khi giá trị được thay đổi bởi sự tương tác của người dùng trên trang chứ không phải khi giá trị được sửa đổi bằng mã.

Ở đây bạn cần sử dụng .change()hoặc .trigger("change")sau khi thay đổi tài sản:

$('input[type="checkbox"][name="something"]').prop("checked", false).change();

Trình diễn làm việc


2
Tôi nghĩ rằng propđã quan tâm đến sự thay đổi thế hệ sự kiện?
Mã hóa

1
Mát mẻ. Cảm ơn. Bản demo tốt chứng minh khái niệm. +1 Cảm ơn.
Mã hóa

Cảm ơn! Vì vậy, lý do tại sao .prop (). Change () không hoạt động với mục đích của tôi là vì tôi đang thực hiện jQuery trong MeteorJS, có cách gọi jQuery hơi khác. Tôi đã thử nó theo cách của bạn chính xác và nó đã làm việc.
fuzzybabybunny

@fuzzybabybunny: không phải vì sao băng. prop () không kích hoạt sự kiện thay đổi.
Milind Anantwar

@MilindAnantwar, tôi đã làm .prop sau đó là .change trong mã sao băng ( Template.myTemplate.events) và nó không hoạt động. Sau đó tôi đặt mã jQuery chính xác tương tự Template.myTemplate.renderedvà nó chạy tốt.
fuzzybabybunny
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.