2012-07-04 13 views
8

Ten kod ulega awarii w przypadku ie9, ponieważ mam ten problem w moim kodzie. Każda praca będzie doceniona .. To nie jest problem z poprzednimi wersjami ie ​​.. Dzięki ..tr display brak błędów 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> 

Nawet przy użyciu onclick zdarzenie wywala przeglądarkę .. spróbuj wykonać następujące czynności .. Przesuń kursor tutaj

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

Potwierdzony być powtarzalne. – leppie

+1

Twój kod próbuje usunąć z wyświetlacza obiekt, na którym unosi się mysz. Czy to jest pożądane? –

+0

Wydaje się być powiązany z: 'Pierwszy wyjątek przy 0x7645b9bc (KernelBase.dll) w iexplore.exe: 0x800706BA: Serwer RPC jest niedostępny." – leppie

Odpowiedz

4

Jest to błąd w IE9, ale reguła css jest logicznie nierozstrzygalne:

Tak szybko, jak to nie jest wyświetlany więcej, mysz nie unosi się dłużej, więc musi być ponownie widoczne. Co oznacza, że ​​mysz jest nad nim. Co oznacza, że ​​musi być ukryty ... co oznacza, że ​​musi być widoczny ... itd.

Powiedział inaczej: specyfikacja nie ma sensu.

To zostało powiedziane, to błąd jest naprawdę denerwujące, jak poniższy kod awarii IE9 też:

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

Ale to się nie stanie, jeśli umieścić swój obsługi zdarzeń na span (na przykład). Sugeruję więc zmianę kodu HTML, aby uniknąć ukrywania tr, na której masz ukryte wykrywanie.

1

Wydaje się, że jest to błąd w IE9.

Zmiana display:none na visibility:hidden spowoduje wyświetlenie tekstu migającego w sposób ciągły.

Jedyna myśl, jaką mogę wymyślić to to, że IE utknie w nieskończonej pętli lub stackoverflow.

Przepraszam, że nie mogę podać rozwiązania.

+0

Nieskończona pętla jest normalna (zobacz moją odpowiedź). –

+0

@dystroy: tak, widziałem (+ 1'd to) – leppie

+0

@dystroy Jeśli jest to nieskończona pętla .. spróbuj tego i wewnątrz funkcji ukryj tr ustawiając display: none .. można zauważyć, że nie jest to pętla nieskończona ..

0

Jeśli ukrywanie TR to, co chcesz, możesz spróbować czegoś takiego:

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

Oto kompletny kod, który pracował dla mnie na IE, FF i 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 mają ten sam problem i znalazły rozwiązanie. Przede wszystkim powinienem powiedzieć, że problem jest rzeczywisty dla każdego wiersza w tabeli z obramowaniem stylu. Zmniejszenie równe collapse (bez względu na to, czy jest zadeklarowane w linii prostej czy w głowie) w IE9.

Moje rozwiązanie:

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 = ''; 
    } 
} 

Albo nawet skrócić:

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 dla ciebie. Zastąp 'tableNode.style.borderCollapse' przez' tableNode.currentStyle.borderCollapse', try: 'var initValue = tableNode.style.borderCollapse || tableNode.currentStyle.borderCollapse; ', a następnie:' if (initValue) {tableNode.style.borderCollapse = initValue; } ' –