2010-12-01 2 views
0

Der Kern meines Problems besteht darin, dass ich eine Tabelle habe, in der jede gerade Zeile versteckt ist und die Sichtbarkeit mit einem Anker in der darüber liegenden Zeile umgeschaltet wird. Dies funktioniert korrekt, aber in einigen Browsern (Safari und Chrome) bewegt sich der tr unter dem gerade erschienenen weiter nach unten, als er sollte.jQuery toggelte tr Elemente wanken nach unten Seite

Wenn Sie den versteckten tr umschalten, driftet der nächste Geschwister die Seite herunter.

ist hier ein bloßen Knochen-Code, der dieses Problem zeigt (erfordert jquery)

<script type="text/javascript"> 
    $(function() { //document ready 

    $('.details').hide(); 

    $('.show_hide').click(function(event){ 
    event.preventDefault(); 
    $(this).parents('tr').next().slideToggle('slow'); 
    }); 


    }); //end doc ready 
</script> 

<style> 
    table { 
    width: 500px; 
    } 

    .main td { 
    width: 33%; 
    } 
</style> 

<table> 
    <tr class="main"> 
    <td>Title</td> 
    <td>Some Detail</td> 
    <td><a href="#" class="show_hide">Show/Hide</a></td> 
    </tr> 

    <tr class="details"> 
    <td> 
    Sed scelerisque, tellus non auctor pretium, felis massa vehicula sem, quis vehicula nulla dolor eget justo. Pellentesque porttitor aliquet metus a accumsan. Aenean luctus, lacus in tristique imperdiet, nulla ipsum dignissim massa, quis laoreet eros justo eu nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam sed purus nisi, at venenatis tellus. Praesent id magna ac dui congue convallis. Duis sit amet arcu eu ipsum tincidunt fermentum. Praesent mollis, eros sit amet auctor iaculis, mi elit aliquet elit, at rhoncus elit urna nec magna. Vestibulum iaculis fringilla diam, in rhoncus tortor blandit id. Nam id leo eros, et posuere massa. Morbi fermentum egestas nisl, et pharetra urna convallis viverra. Maecenas id massa nulla. Pellentesque eget urna vel diam interdum sollicitudin sit amet in massa. 
    </td> 
    </tr> 

    <tr class="main"> 
    <td>Title 2</td> 
    <td>Some Detail 2</td> 
    <td><a href="#" class="show_hide">Show/Hide</a></td> 
    </tr> 

    <tr class="details"> 
    <td> 
    Sed scelerisque, tellus non auctor pretium, felis massa vehicula sem, quis vehicula nulla dolor eget justo. Pellentesque porttitor aliquet metus a accumsan. Aenean luctus, lacus in tristique imperdiet, nulla ipsum dignissim massa, quis laoreet eros justo eu nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam sed purus nisi, at venenatis tellus. Praesent id magna ac dui congue convallis. Duis sit amet arcu eu ipsum tincidunt fermentum. Praesent mollis, eros sit amet auctor iaculis, mi elit aliquet elit, at rhoncus elit urna nec magna. Vestibulum iaculis fringilla diam, in rhoncus tortor blandit id. Nam id leo eros, et posuere massa. Morbi fermentum egestas nisl, et pharetra urna convallis viverra. Maecenas id massa nulla. Pellentesque eget urna vel diam interdum sollicitudin sit amet in massa. 
    </td> 
    </tr> 
</table> 

Der obige Code scheint in Opera und Firefox zu funktionieren, aber das Problem oben geschieht in Safari und Chrome erwähnt. (Habe noch nicht in IE getestet). Das macht mich verdächtig, dass es sich um ein Webkit-Problem handelt.

Hat noch jemand das Problem gefunden? Gibt es eine Problemumgehung?

+0

Code verwendet und das Problem nicht reproduzieren kann, tesdted in Chrome und Safari, können Sie es in dieser Geige reproduzieren: http : //jsfiddle.net/fzHug/1/? –

+0

Wenn Sie google show hide tr jquery zeigen, werden Sie viele Hinweise auf seltsame Dinge finden, wenn Sie versuchen, trs in verschiedenen Browsern anzuzeigen. Allerdings habe ich Ihren Code verwendet, der mit jquery 1.4.3 und chrome 7.0.517.44 getestet wurde und bei dem Ihr Problem nicht aufgetreten ist. Ich habe auch in ie 8 und ff3.6 getestet. Alle Browser funktionierten gut. Mein Vorschlag ist, verschiedene Methoden zu versuchen, anstatt Schieberegler zu verwenden, Fade zu versuchen und regulär show/hide, oder wenn Sie nicht die neueste jquery verwenden, upgraden. Sonst würde ich nur vorschlagen, tr's nicht zu verstecken ... wechseln zu li und css =] – superfro

+0

@Sebastian Patane Masuelli Seltsam nein, es passiert nicht in dieser Geige. jQuery 1.4.4 oder anders. Tolles Werkzeug obwohl –

Antwort

0

Ich kann Ihr Problem in Chrome mit jQuery 1.4.2, aber nicht mit 1.4.4 reproduzieren. Mit 1.4.4 wird die Tabellenzeile überhaupt nicht animiert, sondern nur ein- und ausgeschaltet (nach einer Verzögerung).

Das Verhalten von slideToggle auf Tabellenelemente scheint etwas undefiniert zu sein. Als Abhilfe können ein <div> um Ihre <td> Inhalte platzieren und slideToggle auf dieser Stelle nennen:

<tr> 
    <td colspan="3"> 
     <div class="details"> 
      Sed scelerisque... 
     </div> 
    </td> 
</tr> 
+0

Ich benutze 1.4.2 (in der jquery UI-Paket) Ich werde 1.4.4 geben und sehen, ob ich Verbesserung sehe –

+0

Keine Verbesserung für mich mit 1.4.4, aber es funktioniert, indem es in einem div. Vielen Dank. –