2013-07-03 16 views
21

Il CSS - proprietà pointer-events: none; funziona correttamente in Firefox, ma non in Internet Explorer 9-10."pointer-events: none" non funziona in IE9 e IE10

Esiste un modo per ottenere lo stesso comportamento di questa proprietà in IE? Qualche idea?

+0

Se la vostra intenzione è quella di impedire all'utente di clic in qualsiasi punto della pagina durante una chiamata AJAX, è possibile utilizzare: ** $ ('body'). css ({'cursor': 'wait'}); **, e quando si desidera tornare allo stato normale del cursore, usare: ** $ ('body'). css ({'cursor': 'default'}); ** –

+0

Feb. 2017: FYI funziona su IE11. – Zeek

risposta

19

Dalla documentazione MDN:

Attenzione: L'uso di puntatore-eventi in CSS per gli elementi non SVG è sperimentale. La funzione faceva parte delle specifiche di bozza dell'interfaccia utente CSS3 ma, a causa di molti problemi aperti, è stata posticipata ai CSS4.

Read more here, in fondo, pointer-events su un non-formato SVG (Scalable Vector Graphic) è non-standard.
Se si seleziona la tabella di supporto del browser sulla pagina collegata (circa due terzi verso il basso) si noterà che il supporto di IE sulla non svg di è ziltsh, jack tozzo, naut, ... non supportate , questo è.

Dopo un po 'di scavo, sono venuto in tutta this article che non consentono per voi di imitare i comportamenti attraverso l'uso di strati, e, grazie a this post, ho trovato this JS-bin che potrebbe aiutare ...

Tuttavia, in IE (e Opera, e AFAIK tutti i browser), si potrebbe semplicemente forzare un tipo di cursore su un elemento:

a, a:hover, a:visited, a:active, a:focus /*, * <-- add all tags?*/ 
{ 
    cursor: default;/*plain arrow*/ 
    text-decoration: none;/*No underline or something*/ 
    color: #07C;/*Default link colour*/ 
} 

Il risultato dovrebbe essere abbastanza simile a quella di pointer-events: none;

Aggiornamento:

Se si desidera impedire gli eventi click in IE che, come Shasi ha sottolineato, è impedito in altri browser, è sufficiente aggiungere un listener di eventi che i delegati l'evento Click.
darò per scontato, in questo momento, che si sta come obiettivo tutte le a elementi:

var handler = function(e) 
{ 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    if (target.tagName.toLowerCase() === 'a') 
    { 
     if (!e.preventDefault) 
     {//IE quirks 
      e.returnValue = false; 
      e.cancelBubble = true; 
     } 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 
}; 
if (window.addEventListener) 
    window.addEventListener('click', handler, false); 
else 
    window.attachEvent('onclick', handler); 

che dovrebbero impedire tutti gli eventi click su elementi di ancoraggio.

+0

Ma questo ancora non impedisce l'evento click sul link in IE. –

+0

@Shasi: questa domanda riguarda la regola dell'evento puntatore CSS. Il CSS non impedisce gli eventi click –

+6

No, la regola CSS "pointer-events: none;" impedisce l'evento click su un elemento, in Firefox e Chrome. Tuttavia, non funziona in IE. [Here is a Demo] (http://davidwalsh.name/demo/pointer-events.php) –

5

Dal punto di vista delle API, non penso che Points.js di Rich Harris, né , supportino gli eventi puntatore : nessuno.

Così, ho appena implementato uno script molto piccolo per Polyfill questa funzione:

+1

L'API eventi puntatore non è uguale alla proprietà CSS eventi puntatore. – Charlie

+0

Questo polyfill non funziona in IE10. Ho provato su mappe bing –

+2

Perché richiedere jQuery per un polyfill ?! – reid

2

Per scadente IE10, c'è un'altra soluzione, ad esempio:

/* must be over the element that have the action */ 

.action-container:after { 
    content: ' '; 
    position: absolute; 
    width: 100%; 
    height: 100%; 
    top: 0; 
    left: 0; 
    z-index: 250; 
    background-color: grey; /* must have a color on ie10, if not :after does not exist... */ 
    opacity: 0; 
} 
+0

Fantastico suggerimento per il fallback! Grazie :) – falsarella

Problemi correlati