qwerty12309
Grünschnabel
Edit: Hier ist mein Problem im IE6 zu sehen.
Hi, ich brauche erstmal ein wenig Hilfe, das Problem ueberhaupt einzugrenzen.
Also, ich generiere eine oder mehrere Tabellen pro Seite mit Javascript. Diese Tabelle besitzt nur eine Spalte, enthaelt aber pro Zeile jede Menge Daten und Bilder (jeweils einen Datensatz aus der Datenbank); das genaue Aussehen einer Zeile lege ich mit Hilfe von div-Elementen(CSS) innerhalb der Zeile fest.
Das funktioniert in Firefox und Opera. In IE funktioniert es auch, solange nur eine einzige Tabelle auf der Seite generiert wird. Sobald es mehr Tabellen sind, werden die Zeileninhalte der einzelnen Tabellen nach oben verschoben und liegen aufeinander. Die IE Developer zeigt die Tabellenzeilen in der richtigen Groesse ein, aber der Inhalt liegt teilweise zwischen zwei Zeilen.
Komischerweise repariert sich das Layout von selbst, sobald ich in einer bestimmten Reihenfolge die Icons zum Sortieren anklicke. Ich hab davon mal ein Bildschirmvideo gedreht, sonst glaubt mir das wieder keiner: Video
Ich habe den Quellcode zur Ansicht ausgeschnitten, aber komischerweise hat der IE damit keine Probleme: Link
An den Sortier-Icons kann es aber nicht liegen; das Problem blieb das selbe, nachdem ich diesen Codeteil auskommentiert hatte.
Ich bekomme hier langsam die Krise; wenn ich den Bug nicht finde, werd ich das Praktikum nie beenden koennen ;(
Hier die verwendete Javascript-Datei: Datei
Und noch ein wenig mehr Code (PHP):
Sagt einfach, was ich noch vergessen bzw. nicht beachtet habe.
Und was noch auffaellt, ist dass im IE ein leerer Tag vor der ersten Resultatzeile generiert wird, der ein <div> als Kindelement enthaelt. Kann mir nicht erklaeren, wo der herkommt.
Vielen Dank schon mal fuer eure Hilfe!
Hi, ich brauche erstmal ein wenig Hilfe, das Problem ueberhaupt einzugrenzen.
Also, ich generiere eine oder mehrere Tabellen pro Seite mit Javascript. Diese Tabelle besitzt nur eine Spalte, enthaelt aber pro Zeile jede Menge Daten und Bilder (jeweils einen Datensatz aus der Datenbank); das genaue Aussehen einer Zeile lege ich mit Hilfe von div-Elementen(CSS) innerhalb der Zeile fest.
Das funktioniert in Firefox und Opera. In IE funktioniert es auch, solange nur eine einzige Tabelle auf der Seite generiert wird. Sobald es mehr Tabellen sind, werden die Zeileninhalte der einzelnen Tabellen nach oben verschoben und liegen aufeinander. Die IE Developer zeigt die Tabellenzeilen in der richtigen Groesse ein, aber der Inhalt liegt teilweise zwischen zwei Zeilen.
Komischerweise repariert sich das Layout von selbst, sobald ich in einer bestimmten Reihenfolge die Icons zum Sortieren anklicke. Ich hab davon mal ein Bildschirmvideo gedreht, sonst glaubt mir das wieder keiner: Video
Ich habe den Quellcode zur Ansicht ausgeschnitten, aber komischerweise hat der IE damit keine Probleme: Link
An den Sortier-Icons kann es aber nicht liegen; das Problem blieb das selbe, nachdem ich diesen Codeteil auskommentiert hatte.
Ich bekomme hier langsam die Krise; wenn ich den Bug nicht finde, werd ich das Praktikum nie beenden koennen ;(
Hier die verwendete Javascript-Datei: Datei
Und noch ein wenig mehr Code (PHP):
PHP:
<?
$groups = array();
$groupDate = null;
foreach($headlines as $headline) {
$headline["body"] = str_replace("\r\n", "x", $headline['body']);
$postDate = strftime('%B %Y', $headline["post_time"]);
if($postDate != $groupDate) {
$groupDate = $postDate;
$groups[] = array('header' => $groupDate,
'headlines' => array($headline));
}
else {
$groups[count($groups)-1]['headlines'][] = $headline;
}
}
echo '<script src="javascript/search.js"></script>';
echo "<div id='headlines' class='headlines'>\n";
$first_group = true;
$gnr = 0;
foreach($groups as &$group) {
echo '<script type="text/javascript">';
echo 'origDataSet['.$gnr.'] = '.$this->convertArrayToJS( $group["headlines"] ) . ";\n";
$rows = array ();
echo 'resultRows['.$gnr.'] = ';
foreach($group['headlines'] as $key => $headline) {
$index = 0;
$index = $headline['post_time'] . $headline['summary_content'];
$rows["'" . $index . "'"] = $this->printHeadline($headline, $category, $legend);
}
echo $this->convertAssocToJS( $rows ) . ";\n";
echo '</script>';
echo '<table id="resultsTable'.$gnr.'"><tr><td>';
echo "<div class='dayheader'>";
if(sizeof($group["headlines"]) > 2 and $category->rating) {
echo "<img src='http://www.gamer.nl/images/but_search_sortup.png' id='img_time_sort".$gnr."' ";
echo " style='vertical-align:middle;padding-right:3px;padding-left:5px;' ";
echo "onclick=\"javascript:reSortTable('post_time',document.getElementById( 'resultsTable' + ".$gnr." ),'reviews',".$gnr.");\">";
echo "<span style='padding-right:30px;padding-bottom:3px;position:absolute;right:10px;font-weight:normal;font-size:12px;'>";
echo "<img src='http://www.gamer.nl/images/but_search_unsort.png' id='img_rating_sort".$gnr."' style='padding-right:3px;vertical-align:middle;' ";
echo "onclick=\"javascript: reSortTable( 'summary_content', document.getElementById( 'resultsTable' + ".$gnr." ), 'reviews', ".$gnr." );\">";
echo "rating</span>";
}
echo $group['header']."</div>\n";
echo "<div class='dayblock'>\n";
echo "<noscript>";
foreach($group['headlines'] as &$headline) { // show reviews even if javascript is deactivated
$this->printHeadlineWithoutJS($headline, $category, $legend);
}
echo "</noscript>";
echo "</td></tr></div></table>\n";
if ($first_group){
$first_group = false;
}
$gnr++;
}
?>
<script type="text/javascript">
curSettings.column = "post_time"
curSettings.direction = directions.UP;
window.onload = function() {
for (var i = 0; i < <?=sizeof($groups)?>; i++) {
var resultsTable = document.getElementById( "resultsTable" + i );
showGames( resultsTable, "reviews", i ); // IE6 messes the layout up if we call this function during rendering.
}
}
</script>
<?
echo "</div>";
$o = ob_get_contents();
ob_end_clean();
return $o;
PHP:
function convertArrayToJS( $array ) {
$totalArray = array();
foreach( $array AS $item ) {
if( is_array( $item )) {
$totalArray[] = $this->convertAssocToJS( $item );
}
else {
$totalArray[] = $item;
}
}
return "new Array( " . implode( $totalArray, ", " ) . " )";
}
function convertAssocToJS( $array ) {
$totalArray = array();
$item = current( $array );
do {
if( is_array( $item )) {
$totalArray[] = key( $array ) . " : " . $this->convertAssocToJS( $item );
}
else if( $item ){
$item = ( ereg("[^0-9]", $item )? "\"" . addslashes( $item ) . "\"" : $item );
$totalArray[] = key( $array ) . " : " . $item;
}
}
while( FALSE !== ( $item = next( $array )));
return "{ " . implode( $totalArray, ", " ) . " }";
}
Sagt einfach, was ich noch vergessen bzw. nicht beachtet habe.
Und was noch auffaellt, ist dass im IE ein leerer Tag vor der ersten Resultatzeile generiert wird, der ein <div> als Kindelement enthaelt. Kann mir nicht erklaeren, wo der herkommt.
Vielen Dank schon mal fuer eure Hilfe!
Zuletzt bearbeitet: