2012-07-04 15 views
8

Questo codice si blocca IE9 come sto avendo questo problema nel mio codice .. qualsiasi lavoro intorno sarà apprezzato .. Questo non è un problema con le versioni precedenti di IE .. Grazie ..tr visualizzazione nessuno si blocca IE9

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head></head> 
    <body> 
     <table style="border-collapse: collapse"> 
      <tr id="firsttr"> 
       <td colspan="2"></td> 
       <td></td> 
      </tr> 
      <tr id="secondtr"> 
       <td></td> 
       <td style="border: 1px solid #D2D2D2">Move cursor here</td> 
       <td></td> 
      </tr> 
     </table> 
    </body> 
    <style type="text/css"> 
     #secondtr:hover { 
      display: none; 
     } 

    </style> 
</html> 

Anche usando evento onclick si blocca il browser .. provare quanto segue .. Spostare il cursore qui

<script type="text/javascript"> 
    function HideThis() 
    { 
     document.getElementById('secondtr').style.display = 'none'; 
    } 
</script> 
+0

ha confermato di essere riproducibile. – leppie

+1

Il codice tenta di rimuovere dalla visualizzazione l'oggetto su cui si trova il mouse. È quello desiderato? –

+0

Sembra essere correlato a: 'Eccezione di prima volta a 0x7645b9bc (KernelBase.dll) in iexplore.exe: 0x800706BA: Il server RPC non è disponibile. – leppie

risposta

4

c'è un bug in IE9, ma la regola CSS è logicamente indecidibile:

Non appena non viene visualizzato più, il mouse non è in bilico più quindi deve essere di nuovo visibile. Il che significa che il mouse è finito. Il che significa che deve essere nascosto ... il che significa che deve essere visibile ... ecc.

Detto altrimenti: la specifica non ha senso.

Detto questo, questo bug è davvero fastidioso come il seguente codice si blocca IE9 troppo:

$(window).ready(function(){ 
    $('#secondtr').mouseenter(function(){ 
     $('#secondtr').hide(); 
    }); 
}); 

Ma non succede se si mette il gestore di eventi su un span (per esempio). Quindi ti suggerisco di cambiare il tuo codice HTML per evitare di nascondere lo tr su cui hai un rilevamento in bilico.

1

Questo sembra essere un bug in IE9.

Cambiando display:none a visibility:hidden, il testo lampeggia continuamente.

L'unico pensiero che posso pensare è che l'IE si blocca in un ciclo infinito o in uno stackoverflow.

Siamo spiacenti, non è possibile fornire una soluzione.

+0

Il ciclo infinito è normale (vedi la mia risposta). –

+0

@dystroy: sì, ho visto (fatto +1) – leppie

+0

@dystroy Se questo è un ciclo infinito .. quindi prova questo e all'interno della funzione nascondi il tr impostando display: none .. noterete non si tratta di un ciclo infinito ..

0

Se nascondere il TR è ciò che si vuole, si potrebbe provare qualcosa di simile:

#secondtr:hover { 
    height: 0px; 
    padding: 0px; 
    margin: 0px; 
    border: 0px; 
    font-size: 0px; 
} 

Ecco il codice completo che ha funzionato per me su IE, FF e Safari:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<TITLE> BLAH</TITLE> 
<style type="text/css"> 
#secondtr:hover, #secondtr:hover .secondTD { 
    height: 0px; 
    padding: 0px; 
    margin: 0px; 
    border: 0px; 
    font-size: 0px; 
} 
.secondTD{ 
    border: 1px solid #D2D2D2; 
} 

</style> 
</head> 
<body> 
<table style="border-collapse: collapse"> 
    <tr id="firsttr"> 
     <td colspan="2"> </td> 
     <td></td> 
    </tr> 
    <tr id="secondtr"> 
     <td></td> 
     <td class="secondTD">Move cursor here</td> 
     <td></td> 
    </tr> 
</table> 
</body> 
</html> 
6

I hanno lo stesso problema e hanno trovato una soluzione. Prima di tutto dovrei dire che il problema è reale per qualsiasi riga nella tabella con stile borderCollapse uguale a compressione (non importa se è dichiarata inline o in testa) in IE9.

La mia soluzione:

function hideRow(tableNode, rowNode, hide){ 
    if(hide){ 
     if(window.navigator.userAgent.search('MSIE 9.0') != -1){ 
      var initValue = tableNode.style.borderCollapse; 
      tableNode.style.borderCollapse = 'separate'; 
      rowNode.style.display = 'none'; 
      tableNode.style.borderCollapse = initValue; 
     }else{ 
      rowNode.style.display = 'none'; 
     } 
    }else{ 
     rowNode.style.display = ''; 
    } 
} 

O anche accorciare:

function hideRow(tableNode, rowNode, hide){ 
    var initValue = tableNode.style.borderCollapse; 
    tableNode.style.borderCollapse = 'separate'; 
    rowNode.style.display = hide ? 'none' : ''; 
    tableNode.style.borderCollapse = initValue; 
} 
+0

+1 per te. Sostituisci 'tableNode.style.borderCollapse' da' tableNode.currentStyle.borderCollapse', prova: 'var initValue = tableNode.style.borderCollapse || tableNode.currentStyle.borderCollapse; 'e quindi:' if (initValue) {tableNode.style.borderCollapse = initValue; } ' –