Tôi đang cố gắng theo dõi các thay đổi đối với hộp chọn (hoặc option
yếu tố lồng nhau) với chức năng mới Mutation Observer. Tuy nhiên, chỉ "setAttribute" đang kích hoạt gọi lại của người quan sát đột biến đối với tôi.Webkit Mutation Observer callback không được kích hoạt khi thay đổi thuộc tính hộp chọn
Dưới đây là đoạn code tôi đang sử dụng:
~function(doc, $) {
var select = $('select');
// http://www.w3.org/TR/dom/#mutation-observers
var observer = new WebKitMutationObserver(function(mutations) {
alert(mutations.length + " mutations happened");
});
observer.observe(select, {
// monitor descendant elements – changing `selected` attr on options
subtree: true,
attributes: true
});
// this triggers Observer's reaction, but doesn't update select box UI
select.setAttribute('value', 'whee');
// this updates select box UI, but doesn't trigger mutation observer's callback
select.value = "whee";
// this also updates the UI, but doesn't trigger mutation observer's callback
select.getElementsByTagName('option')[0].selected = true;
//
// neither does manual selecting of options trigger mutation observer unfortunately :(
button.addEventListener('click', function(e) {
e.preventDefault();
// my goal is to react to this change here
select.value = Math.random() > .5 ? "whee" : "whoa";
}, false);
}(document, function(selector) { return document.querySelector(selector); });
Và đây là mã này trong hành động http://jsfiddle.net/gryzzly/wqHn5/
Tôi muốn phản ứng với những thay đổi các thuộc tính (selected
trên <option>
hoặc value
trên <select>
), bất cứ đề nghị về lý do tại sao người quan sát không phản ứng lại được chào đón nhiều hơn!
Tôi đang thử nghiệm điều này trong Chrome 18.0.1025.168 trên Mac OS X. Mã sản xuất dĩ nhiên cũng có tiền tố moz
cho hàm tạo và phiên bản chưa được sửa cố định, đây là mã thử nghiệm.
UPD.
Kiểm tra mã trong Firefox Hàng đêm và nó hoạt động giống như trong Chrome, cũng như trong Chrome Canary. Tôi đã điền lỗi cho cả hai trình duyệt:
- https://bugzilla.mozilla.org/show_bug.cgi?id=757077
- https://code.google.com/p/chromium/issues/detail?id=128991
hãy bình luận và bỏ phiếu cho những lỗi nếu bạn cũng thấy vấn đề này gây phiền nhiễu.
Đừng nghĩ rằng tôi muốn dựa vào việc triển khai thử nghiệm một thông số chưa hoàn thành. –
Dường như là một biểu hiện khác của lỗi liên quan đến WebKit được báo cáo chống lại Chromium: http://code.google.com/p/chromium/issues/detail?id=103551 –
@TimDown đã nói tôi đang dựa vào bất cứ điều gì? :-) Tôi đang thử nghiệm bản thân mình! –