2012-06-17 35 views
9

Tôi có một nhóm các đài phát thanh với một handler onchange:IE8 & IE7 onchange kiện được kích hoạt chỉ sau khi lặp đi lặp lại lựa chọn

<input type="radio" name="Q12" value="radio" id="Q12_0" onchange="nextPnl('Q12');"> 
<br/> 
<input type="radio" name="Q12" value="radio" id="Q12_1" onchange="nextPnl('Q12');"> 
     ​ 

function nextPnl(did) 
{ 
document.write(did); 

}​ 

Vấn đề là trong IE8 & IE7, sự kiện onchange được kích hoạt lựa chọn chỉ sau khi lặp đi lặp lại .

Hãy xem demo này trong IE Developer Tools [Trình duyệt Mode] IE8: http://jsfiddle.net/3zwur/2/

+0

Bạn có thể tìm giải pháp chung cho lỗi sự kiện onchange * IE7/IE8 * trong [bài viết này] (http://sleeplesscoding.blogspot.ro/2010/01/fixing-ie-onchange-event- for-checkboxes.html). –

Trả lời

16

Điều này là do một lỗi với IE7 và IE8 của sự kiện thay đổi. Thay vào đó, bạn nên nghe sự kiện click.

Như được hiển thị trong table on quirks mode, sự kiện thay đổi trên nút radio và hộp kiểm này khá lỗi trong IE7 và IE8.

Bạn có thể nghe sự kiện click như vậy:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="nextPnl('Q12');"> 
<br> 
<input type="radio" name="Q12" value="radio" id="Q12_1" onclick="nextPnl('Q12');"> 

Và một ngã ba của fiddle của bạn: http://jsfiddle.net/T7VYL/

Thông thường, sử dụng một thư viện javascript như JQueryYUI làm cho cuộc sống của bạn dễ dàng hơn, mặc dù từ thử nghiệm của tôi, họ không sửa lỗi này trong các phiên bản cũ của IE.

Nếu bạn vẫn muốn nghe sự kiện thay đổi, bạn có thể triển khai bản sửa lỗi sau: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-firing/. Về cơ bản nó lắng nghe sự kiện nhấp chuột và sau đó khiến nguyên tố kích hoạt sự kiện thay đổi.

Như thể hiện bởi fiddle của Người hỏi: http://jsfiddle.net/3zwur/3

+0

Tôi chỉ thử nghiệm JQuery và YUI3, và thật không may, họ không sửa lỗi này trong các phiên bản cũ của IE. Giải pháp của bạn là lắng nghe sự kiện nhấp chuột hoặc gây ra sự kiện thay đổi để kích hoạt như vậy: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not- bắn/ – F21

+0

http://jsfiddle.net/3zwur/3/ –

+0

Điều này được kích hoạt sớm cho tôi - lần nhấp được đăng ký trước khi hộp thoại nhập tệp xuất hiện. Giải pháp của tôi là thực hiện hàm thay đổi trên 'setTimeout' 0 mili giây sau khi nhấp chuột, lạm dụng tính đồng bộ để cho phép ngăn xếp xóa (và hành động nhập tệp để giải quyết) trước khi điều này xảy ra:' onchange = "setTimeout (function deferNextPnl() {nextPnl ('Q12')}, 0) "'. – Barney

3

Một lựa chọn khác là phải có một sự kiện onchange như bạn đã có, và thêm một sự kiện onclick mà loại bỏ tập trung từ các nút radio:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="this.blur()" onchange="nextPnl('Q12');"> 
0

Một giải pháp là đặt sự kiện onchange trên biểu mẫu kèm theo thông qua jQuery.

$('#form').on('change', function() { 
    $(this).submit(); 
}); 
Các vấn đề liên quan