2013-01-13 16 views
5

Internet Explorer non genera eventi onmousemove quando il target dell'evento è posizionato su un elemento <img> e non ha uno sfondo.Problema con mousemove in Internet Explorer

Ma registra l'evento quando il target ha uno sfondo. Qualcuno ha una spiegazione per questo? Ho avuto lo stesso comportamento in IE10, IE9 e IE8.

Fiddle qui: http://jsfiddle.net/xSpqE/2/

+2

+1 interessante domanda. So che questo non è quello che hai chiesto, ma dando allo sfondo uno sfondo come 'background: rgba (0,0,0,0);' sembra aggiustarlo nell'anteprima di IE10. [fiddle] (http://jsfiddle.net/xSpqE/16/) –

+0

Si può vedere che nella parte della casella non coperta dall'immagine, il testo si aggiorna. – kenstone

+1

^In realtà è il contrario. La sovrapposizione copre l'immagine. La sovrapposizione con sfondo innesca 'mousemove'. Più interessante, se si aggiunge del testo all'overlay senza applicare alcuno stile di sfondo, l'evento mousemove viene attivato solo quando si sposta il mouse sopra il testo. Ancora un altro bug di IE che non ho mai visto prima. Immagino di non usare molto spesso "mousemove". –

risposta

0

Ancora un altro IE falliscono! Questo è più di una soluzione di una risposta, ma sembra funzionare bene:

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

Questo è in aggiunta alla funzione di $('.overlay').mousemove, in modo da tenere anche, e naturalmente il controllo is_ie è opzionale.

2

come chiesto OP per un motivo, ecco la mia svolta:

E 'più facile da spiegare visivamente, quindi in primo luogo fuori aggiungiamo un gestore di clic per i img s:

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

Fiddle

Giusto. Fai clic sull'immagine nei browser Chrome/Firefox/not-IE e non accadrà nulla poiché lo è lo div in posizione assoluta.

Ora provalo su IE. Il gestore dei clic di img viene attivato! Pertanto mostra che IE spinge gli elementi attraverso elementi "trasparenti" (senza contenuto o sfondo) assolutamente posizionati. Più interessante, gli elementi relativamente posizionati subiscono lo stesso problema e l'impostazione di z-index su entrambi gli elementi non lo risolverà. Ovviamente, poiché l'immagine è sopra l'overlay, non attiverà l'evento mousemove dell'overlay.

Una soluzione alternativa consiste nel fornire un po 'di "riempimento" alla sovrapposizione, ad esempio background:rgba(0,0,0,0) imporrà a IE di mantenere l'elemento posizionato in modo assoluto nella parte superiore. Fiddle. Se hai bisogno di supportare i browser senza il supporto di rgba, usa una gif trasparente 1x1px come sfondo.

Non ho mai visto questo definito in nessuna specifica o ufficialmente segnalato come un bug. Non c'è alcuna logica o ragione per gli elementi posizionati in modo assoluto senza il contenuto o lo sfondo di subire questo problema di z-index, quindi lo chiamerò ancora un altro bug di IE. Forse segnalarlo sul Microsoft forums sarebbe utile.

Inoltre, relativa domanda: IE bug: absolutely-positioned element with a non-transparent background colour

+1

'come l'img finisce sopra il div" trasparente "assolutamente posizionato. Penso che potrebbe essere quando un elemento posizionato in modo assoluto non ha uno sfondo, IE pensa che non ci sia. Logica IE :( –

+0

@Derek Ebbene sì, questo è quello che ho concluso nel paragrafo sopra.Elementi senza contenuto o sfondo è ciò che ho chiamato "trasparente", questi soffrono di questo errore z-index.Quando ho detto "nessuna idea", in realtà significava qualcosa del tipo "Non ho mai visto questo definito in nessuna specifica né ufficialmente segnalato come bug". Suppongo che questa sia una dichiarazione migliore, sostituirà quella nella risposta. = = ' –

+1

Grazie per il chiarimento: ') –