2013-01-13 41 views
5

Trình khám phá Internet không kích hoạt sự kiện onmousemove khi mục tiêu sự kiện được định vị trên phần tử <img> và thiếu nền.Sự cố với mousemove trong Internet Explorer

Nhưng nó đăng ký sự kiện khi mục tiêu có nền. Có ai có một lời giải thích cho điều này? Tôi đã có hành vi tương tự trong IE10, IE9 và IE8.

Fiddle ở đây: http://jsfiddle.net/xSpqE/2/

+2

+1 câu hỏi thú vị. Tôi biết đây không phải là những gì bạn yêu cầu, nhưng cho lớp phủ một nền tảng như 'nền: rgba (0,0,0,0);' dường như sửa chữa nó trong bản xem trước IE10. [fiddle] (http://jsfiddle.net/xSpqE/16/) –

+0

Bạn có thể thấy rằng trong một phần của hộp không có trong hình ảnh, văn bản sẽ cập nhật. – kenstone

+1

^Nó thực sự là một cách khác. Lớp phủ bao gồm hình ảnh. Lớp phủ có nền sẽ kích hoạt 'mousemove'. Thú vị hơn, nếu bạn thêm một số nội dung văn bản vào lớp phủ mà không áp dụng bất kỳ kiểu nền nào cho nó, sự kiện mousemove chỉ được kích hoạt khi bạn di chuyển chuột phía trên văn bản. Tuy nhiên, một lỗi IE khác mà tôi chưa bao giờ gặp trước đó. Tôi đoán tôi chỉ không sử dụng 'mousemove' rất thường xuyên. –

Trả lời

0

Tuy nhiên, một trình duyệt IE thất bại! Đây là chi tiết của một workaround hơn một câu trả lời, nhưng có vẻ như để làm việc ổn:

var is_ie = $.browser.msie; 
if(is_ie){ 
    $('.main img').mousemove(function(e){ 
     $('.pageX').text('pageX: '+e.pageX); 
    } 
} 

Đó là ngoài các $('.overlay').mousemove chức năng, vì vậy giữ cho rằng quá, và tất nhiên việc kiểm tra is_ie là không bắt buộc.

2

Như OP hỏi vì một lý do, đây là bước đột phá của tôi:

Nó dễ dàng hơn để giải thích trực quan, vì vậy trước hết chúng ta hãy thêm một handler nhấp chuột vào img s:

$('img').click(function() { 
    $('.pageX').text('img clicked!'); 
}); 

Fiddle

Đủ công bằng. Bạn nhấp vào hình ảnh trong trình duyệt Chrome/Firefox/không phải IE và sẽ không có gì xảy ra khi hoàn toàn được định vị div bao gồm nó.

Bây giờ hãy thử trên IE. Trình xử lý nhấp chuột của img được kích hoạt! Do đó, nó cho thấy rằng IE đẩy các phần tử thông qua các phần tử "trong suốt" được định vị hoàn toàn (không có nội dung hoặc nền). Thú vị hơn, các yếu tố tương đối vị trí bị cùng một vấn đề và thiết lập z-index trên một trong hai/cả hai yếu tố sẽ không giải quyết được một trong hai. Tất nhiên, vì hình ảnh ở trên lớp phủ, hình ảnh sẽ không kích hoạt sự kiện mousemove của lớp phủ.

Giải pháp thay thế là cung cấp một số "điền" cho lớp phủ, giả sử background:rgba(0,0,0,0) sẽ buộc IE giữ nguyên tố vị trí tuyệt đối ở trên cùng. Fiddle. Nếu bạn cần hỗ trợ các trình duyệt không có hỗ trợ rgba, hãy sử dụng gif trong suốt 1x1px làm nền.

Tôi chưa bao giờ thấy điều này được xác định trong bất kỳ thông số kỹ thuật nào cũng như không chính thức được báo cáo là lỗi. Không có logic hoặc lý do cho các yếu tố hoàn toàn vị trí mà không có nội dung hoặc nền tảng để chịu vấn đề z-index này, do đó tôi sẽ gọi nó là một lỗi IE khác. Có thể báo cáo nó trên Microsoft forums sẽ được sử dụng.

Ngoài ra, câu hỏi có liên quan: IE bug: absolutely-positioned element with a non-transparent background colour

+1

'cách img kết thúc lên trên div" trong suốt "hoàn toàn được định vị, tôi nghĩ nó có thể là khi một phần tử vị trí tuyệt đối không có nền, IE nghĩ rằng nó không có ở đó. IE logic. : ( –

+0

@ Derek Vâng vâng, đó là những gì tôi đã kết luận trong đoạn trên. Các yếu tố không có nội dung cũng như nền là những gì tôi đặt tên là "trong suốt", chúng bị lỗi z-index này. Khi tôi nói "không có ý tưởng" có nghĩa là một cái gì đó trong thích "Tôi đã không bao giờ nhìn thấy điều này được xác định trong bất kỳ spec cũng không chính thức báo cáo như là một lỗi" .Tôi đoán đây là một tuyên bố tốt hơn, sẽ thay thế một trong đó vào câu trả lời '=]' –

+1

Cảm ơn bạn đã làm rõ: ') –

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