2011-11-03 39 views
11

Tôi thấy "SCRIPT3: Thành viên không tìm thấy". lỗi trong IE < 9. Nhìn vào các địa điểm khác nhau, (ví dụ: Member not found IE error (IE 6, 7, 8, 9)) dường như xảy ra ở setTimeout bên trong phần .hover().IE <9 hiển thị "Thành viên không tìm thấy"

Tôi đã làm theo các bước trong nhưng vẫn gặp sự cố tương tự. Tôi sẽ rất tuyệt vời để được giúp đỡ.

Có thể nó cũng có thể xảy ra tại các địa điểm bên trong change() fn.

tôi đã đặt toàn bộ mã tại địa chỉ: http://jsfiddle.net/f4tZQ/

+0

bạn có thể thêm chỉnh sửa làm câu trả lời không? –

+0

Trong tệp jquery-1.6.2.js, dòng 3172, tôi đã nhận xét 'e.cancelBubble = true; 'và chèn ' if (typeof e.cancelBubble! == 'unknown') {e.cancelBubble = true; } '. Nói cách khác, một chút sửa đổi của tập tin jquery gốc. – maan81

+0

Xin lỗi. Muốn thêm mã: nhận xét ra - 'e.cancelBubble = true;' và chèn - 'if (typeof e.cancelBubble! == 'unknown') {e.cancelBubble = true; } ' – maan81

Trả lời

6

Sau một lúc tìm kiếm, tôi dường như bị ảnh hưởng bởi jQuery lỗi. Theo "chú thích: 4", thay đổi tệp jQuery-1.6.2.js, dòng 3172 giải quyết được sự cố.

if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; } 

Đừng hỏi tại sao, nhưng nó làm việc ... Đối với một số lý do jQuery hoặc IE trả 'lạ' ở đây thay cho 'undefined'.

Thu được từ:

Nguồn: http://bugs.jquery.com/ticket/10004

+0

Xem câu hỏi của tôi để biết thêm thông tin về" không xác định "trong IE: http://stackoverflow.com/questions/10982739/typeof-returning-unknown-in-ie –

+3

Chỉnh sửa JQuery là một ý tưởng tồi. – Nicknameless

8

Đối với những người nhận được ở đây người không muốn sửa đổi mã nguồn jQuery ... (CHO TÌNH YÊU CỦA ĐỨC CHÚA TRỜI không làm điều đó)

Điều này xảy ra theo nghĩa là < 9 khi kích hoạt sự kiện tùy chỉnh. Nếu bạn có quyền truy cập vào sự kiện trước khi nó đến điểm mà tức là sự cố, chỉ cần di chuyển xuống chuỗi originalEvent và đặt chuỗi cuối cùng = {};

Mã bên dưới là khi bạn đang dựa vào jQuery để xử lý giá trị trả về của trình xử lý sự kiện (false) ở đâu đó trong chuỗi. Nếu bạn muốn hủy sự kiện ở đây, hãy xem nhận xét - hãy gọi điện đến e.stopPropagation() trong khối try/catch

var handleAndFire = function(e) { 
var ev = new $.Event('stack.overflow'); 

    //you may have to debug and manually inspect to see how 
    //deep the originalEvents go 
    //or you could write your own function to traverse 
    //depth first and find it automatically, I'm lazy. 
    e.originalEvent.originalEvent = {}; //fix for ie < 9 
    ev.originalEvent = e; 
    $(document).trigger(ev);  
} 
$(document).click(handleAndFire); 
+2

Rất đẹp. Tôi thấy rằng việc sửa đổi 'e.originalEvent.originalEvent' đã phá vỡ lệnh gọi' stopPropagation() '(không có sự cố nhưng cũng không có tuyên truyền dừng) trong trường hợp của tôi, đó là nguồn gốc của vụ tai nạn ngay từ đầu. Tôi đã giải quyết vấn đề cuối cùng bằng cách gói cuộc gọi trong một try/catchall: 'try {event.stopPropagation(); } catch (e) {} ' – Simon

+0

Đây là một giải pháp tuyệt vời để gọi event.stopPropagation(), nhưng không giúp đỡ nếu bạn trả về false và cho phép jQuery tự dừng. – scaryman

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