Ankündigung

Einklappen
Keine Ankündigung bisher.

Dyn. generierte ID wird in FF scheinbar falsch interpretiert

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dyn. generierte ID wird in FF scheinbar falsch interpretiert

    Hallo an alle,

    Ich hab mal wieder ein Problem, anfänger halt... Ich hole mir aus einer DB Nachrichten, diese sollen anfangs nur den Betreff zeigen und beim onclick Event erst den Nachrichten Text zeigen. Also lass ich php die Daten in divs packen vergebe eine Eindeutige ID (kommt auch nirgends woanders im QT vor), funtioniert auch tadellos. Im QT stehen die richtigen ID´s an der richtigen Stelle. Hier der PHP Teil:

    PHP-Code:
    <?php
    $sql 
    'SELECT user_msg.head, user_msg.msg, user_msg.user_id, user_msg.time, user_msg.read, user.vorname, user.name FROM user_msg LEFT JOIN user ON (user_msg.user_id=user.id) WHERE to_id="' $_SESSION['user_id'] . '"';
    $result mysql_query($sql);
    $msg_id 1;
    while(
    $mail mysql_fetch_assoc($result)){ ?>
        <div class="msg_container">
            <p class="mail_line" onclick="openMsg('<?= $msg_id ?>');">
            <?php
                
    if($mail['read'] == 0){
                    echo 
    '[b]';
                }
            
    ?>
            <span class="betreff"><?= $mail['head']?></span><span class="from"><?= $mail['vorname'?><?= $mail['name'?></span><span class="msg_datum">
            <?php 
                
    // Zeit und Datum der Message
                
    $time $mail['time'];
                
    $msgTime date('H:i:s'$time);
                
    $msgDate date('d.m.Y'$time);
                list(
    $tag$mon$jahr) = explode('.'$msgDate);
                
                
    // Zeit und Datum von Heute
                
    $now time();
                
    $nowDate date('d:m:Y'$now);
                list(
    $tagN$monN$jahrN) = explode('.'$nowDate);
                if(
    $tag == $tagN && $mon == $monN && $jahr == $jahrN){
                    echo 
    $msgTime;
                }else{
                    echo 
    $msgDate;
                }
            
    ?>
            </span>
            <?php
                
    if($mail['read'] == 0){
                    echo 
    '[/b]';
                }
            
    ?>
            </p>
            <p class="msg_text" style="display:none" id="msg_<?= $msg_id ?>">

    <?= $mail['msg']?></p>
        </div>
    <?php 
    $msg_id
    ++;
    }                    
    ?>
    Wenn ich nun auf das zu öffnende (bsp. das erste) Element im FF Klicke ziegt mir das alert aus der js function:

    Code:
    function openMsg(id){
    	 if(document.layers) {
    		// Netscape 4.x-Code
    		alert("layers: "+id);
    		var element = "msg_"+id;
    		var msg = document.element;
    		if(msg.style.display == 'none'){
    			msg.style.display = 'block';
    		}else{
    			msg.style.display = 'none';
    		}
    	}
    
    	if(document.all) {
    		// Internet Explorer 4.x/5.x/6.x-Code
    		alert("all: "+id);
    		var element = "msg_"+id;
    		var msg = document.all.element;
    		if(msg.style.display == 'none'){
    			msg.style.display = 'block';
    		}else{
    			msg.style.display = 'none';
    		}
    
    	}else if(document.getElementById) {
    		// Netscape 6.1-Code
    		alert(id);
    		var msg = document.getElementById('msg_'+id);
    		if(msg.style.display == 'none'){
    			msg.style.display = 'block';
    		}else{
    			msg.style.display = 'none';
    		}
    
    	}
    }
    eine 2 an und öffnet nicht das angeklickte sondern das Element darunter. Ich hatte die function anfangs ohne die Browserweiche, macht in beiden fällen kein Unterschied aus. Ich erhalte keine Fehlermeldung. Im IE geht es aber tadellos. Wodran kann es liegen? Es will mir nicht in den Kopf warum FF aus ner eins ne zwei macht obwohl im QT alles richtig sitzt.

  • #2
    gib den elementen ma noch nen "name" attribut,
    hat so ein ähnliches prob ma mit opera u IE mit der rumscrollerei^^ (also in der url "index.php?bla=blub#scrollhierher")
    beim IE ging das nur mit namen... bei opera nur mit ids :S war scho komisch

    Kommentar


    • #3
      erstens kann der ausdruck
      var element = "msg_"+id;
      var msg = document.all.element;
      jeden browser verwirren.

      zweitens
      getElementByID versteht nur IE4 und netscape bis version 6.0 nicht. du kannst ruhig auf getElementByID umsteigen.
      http://www.w3schools.com/browsers/browsers_stats.asp
      nimm bitte alles ausser getElementById weg und zeig uns die html-ausgabe, damit wir das testen können.

      Kommentar


      • #4
        Fehler gefunden

        Ich habe den Fehler gefunden. Es war ein Div Element mit drei span Elementen drin schuld. Diese befindet sich genau über den Elementen die geöffnet werden sollten. Im Div war ne id drin die den gleichen Namen hatte wie die class vom span. Wundert mich das soetwas zum Problem werden kann.

        Danke für eure Tips.

        Kommentar

        Lädt...
        X