Lỗi về target
là do có mã trong trình xử lý sự kiện đang cố gắng đọc thuộc tính target
của đối tượng Event
được liên kết với sự kiện thay đổi. Bạn có thể thử đi qua trong một faux-tổ chức sự kiện để đánh lừa nó:
var range= document.getElementById('range');
range.onchange({target: range});
hoặc, nếu bạn có thể, thay đổi mã xử lý để sử dụng this
thay vì event.target
.Trừ khi bạn đang sử dụng ủy nhiệm (bắt các sự kiện thay đổi trên đối tượng con từ cha mẹ, cái gì đó phiền phức cho sự kiện thay đổi vì IE không 'bong bóng' chúng), đích của sự kiện thay đổi luôn là yếu tố xử lý sự kiện đã được đăng ký, làm cho event.target
không cần thiết.
Nếu trình xử lý sự kiện sử dụng nhiều thuộc tính của Event
hơn chỉ target
, bạn sẽ cần giả mạo nhiều hơn hoặc truy cập giao diện trình duyệt ‘thực’ để gửi các sự kiện. Điều này cũng sẽ cần thiết nếu người nghe sự kiện có thể đang được sử dụng (addEventListener
hoặc attachEvent
trong IE) vì chúng sẽ không hiển thị trên thuộc tính trực tiếp onchange
. Điều này phụ thuộc vào trình duyệt (fireEvent
cho IE, dispatchEvent
cho các tiêu chuẩn) và không khả dụng trên các trình duyệt cũ hơn hoặc ít người biết đến hơn.
Tôi nghĩ 'fireEvent()' là một thứ chỉ có trong IE. Các trình duyệt tuân thủ tiêu chuẩn sử dụng 'dispatchEvent()'. – Pointy
Tôi nhận được một "Loại lỗi không hợp lệ: Đối tượng # không có lỗi 'fireEvent'" với phương thức –
Mircea
@Pointy: bạn đúng, tôi đã cập nhật - cảm ơn –