2013-11-25 9 views
48

Il problema

In IE11 l'immagine nel seguente codice è selezionabile per attivare/alternare l'ingresso nell'etichetta:etichetta immagine per ingresso in una forma non cliccabile in IE11

<label> 
    <input type="checkbox"> some text 
    <img src="http://placeimg.com/100/100/any" alt="some img"> 
</label> 

Mentre l'immagine in questo stesso codice esattamente ma all'interno di un <form> non è cliccabile per attivare/commutare l'ingresso:

<form> 
<label> 
    <input type="checkbox"> some text 
    <img src="http://placeimg.com/100/100/any" alt="some img"> 
</label> 
</form> 

(Demo at jsfiddle)

Example

Si noti che nell'esempio animazione qui sopra sto cliccando la seconda immagine, che non funziona, ma cliccando sul testo funziona (appena fatto che a dimostrare).

Questo è stato testato e riprodotto su:

  • IE 11.0.9600.16428 su Windows 7 SP1 x64 Pro.
  • IE 11.0.9600.16438 su tablet Windows RT 8.1.
  • IE 11.0.9600.17105 su Windows 7 Pro SP1 x64.
  • IE 11.0.10240.16431 su di Windows 10

Questo problema non si verifica in IE9, IE10, Microsoft bordo, e altri browser.

Domande:

  1. può risolvere il problema senza JS pur utilizzando i tag immagine?
  2. In caso contrario, quali altre possibili soluzioni ci sono?
  3. (Opzionale) Perché l'immagine nel secondo esempio non attiva l'elemento di input (mentre lo si fa nel primo)?

risposta

75

Un modo per risolvere questo problema è con pointer-events: none sull'immagine e regolare l'etichetta con ad esempio display: inline-block. (pointer-eventsis supported in IE11.)

label{ 
    display: inline-block; 
} 
label img{ 
    pointer-events: none; 
} 

(Demo at jsFiddle)

+1

Se si utilizza il framework bootstrap, tutte le immagini con la classe 'img-responsive' ottengono lo stile' display: block'. In tal caso, devi aggiungere una riga aggiuntiva all'etichetta 'img'css. Questo dovrebbe essere aggiunto: 'display: inline! Important'. – Timo002

+1

perché 'pointer-events: none' lo aggiusta? Perché la proprietà 'display' dell'immagine è importante? Questa risposta non spiega affatto quale sia il vero problema. – chiliNUT

+2

@chiliNUT: il bug di IE11 è che facendo clic sull'elemento dell'immagine non si fa ciò che è previsto. Impostando 'puntatore-eventi: nessuno' sull'immagine e rendendo l'elemento etichetta grande almeno quanto l'immagine che il clic è registrato sull'elemento etichetta, nel qual caso IE fa quello che dovrebbe. – Qtax

4

È questione un po 'più vecchio, ma come la sua piuttosto alto in Ricerca Google, vi posterò qui una risposta più che risolve questo in tutta IE versioni.

.

La casella/radio deve essere fuori dell'etichetta, deve avere il proprio ID univoco ed etichetta deve avere attributo per che contiene l'ID di casella/radio con relativo a:

<label for="my_lovely_checkbox">Hello good friend</label> 
<input type="checkbox" value="Hello" id="my_lovely_checkbox"> 

Se fatto e se si utilizza PHP (che probabilmente sei), è possibile utilizzare questo pezzo di codice:

if (preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false)) { 
    ?> 
    <script> 
     $(document).ready(function() { 
      $("label img").on("click", function() { 
       $("#" + $(this).parents("label").attr("for")).click(); 
      }); 
     }); 
    </script> 
    <? 
} 

so che la sua JS, ma non v'è in realtà alcuna altra correzione per =< IE10 senza l'utilizzo di JS.

Rileva tutte le versioni di IE (inclusi IE10 e 11, non ho idea di Spartan, penso che non lo rilevi).

Ps .: La risposta sopra di me in realtà non funziona per IE8, IE9 e IE10. Solo per quello che sai.

+0

Questo errore non era presente in IE10 quando ho provato, come ho scritto nella domanda. Stai dicendo che anche IE10 ha questo bug? Demo? – Qtax

+0

@Qtax È ancora lì. l'ho provato proprio ora in chrome e IE10. Funziona in Chrome, non in IE10: http://jsfiddle.net/v4rz346s/ Ma devi impostare IE su Edge e non su IE 10 (nel menu F12 -> Emulazione). Il problema è che Edge è impostato come predefinito, quindi a meno che l'utente non lo cambi a IE10, non funzionerà. – MiChAeLoKGB

+0

Testato l'esempio (e il mio originale) in IE10 (real IE10 in una VM), è possibile fare clic sulle immagini bene. Nessun bug lì. Quindi probabilmente stai facendo qualcosa di sbagliato con il tuo test. – Qtax