• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

createElement und onmouseover geht nicht im IE

Status
Für weitere Antworten geschlossen.

Puccini

Neues Mitglied
Hallo,

im FF geht folgender code wunderbar:
Code:
var neue_zeile = document.createElement("tr");
neue_zeile.onmouseover = function hover(){this.style.background = "#FF0000"};
neue_zeile.onmouseout = function nohover(){ this.style.background = bgColor};
im IE hingegen tut sich basolut nix.
auch die Funktion
Code:
neue_zeile.ondblclick = function checkDB()
wird nicht ausgeführt...

Wie muss ich das gestallten damit das doch noch geht?
Danke :D
 
Stell sicher, dass "this" auch das Element ist. An das Element kommt du auch anders, z.B:
Code:
function (event) {
   event = event || window.event; //IE speichert das Event-Objekt in einer globalen Variable
   var element = typeof event.target != "undefined" ? event.target : event.srcElement; // erstes nach DOM-Standard, zweites IE
   // element.style...
}
Andererseits ist die Variable neue_zeile ist geclosured, also innerhalb der Funktionen verfügbar:
Code:
var neue_zeile = document.createElement("tr");
neue_zeile.onmouseover = function hover(){ neue_zeile.style.background = "#FF0000"};
neue_zeile.onmouseout = function nohover(){ neue_zeile.style.background = bgColor};
Woher da "bgColor" kommt weiß ich nicht.

Ansonsten hilft die die Fehlerkonsole immer weiter. Warum haben deine Anonyme Funktionen einen Namen? Du hast eigentlich keinen Nutzen davon.
 
ja das mit dem namen hab ich schon behoben... war glaub ich mal zu testzwecken.

Code:
bgColor = neue_zeile.getAttribute('background-color',false);
daher kommt bgColor :D


ich hab das this mal durch neue_zeile erzetzt, aber der springt ja nicht mal in die funktion hinein -.-
in der fehlerkonsole beim ff steht nix, beim ie hab ich keine.. nur das fehlermeldungsymbol unten. aber das kommt nicht. also keine scriptfehler in dem sinn.

ich weis echt nich weiter warum das net geht -.-
kann es daran liegen wie ich das objekt in den baum einbinde?
Code:
//um im IE den Bereich zu aktuallisieren, da sonst keine Anzeige
                if(useIE)
                {
                    SNMPTabelle_kopf = document.getElementById("SNMPTabelle_kopf");
                    SNMPTabelle_kopf.lastChild.parentNode.appendChild(neue_zeile);
                    SNMPInhalt.innerHTML += "";        
                    //SNMPTabelle_kopf.appendChild(neue_zeile);
                }else
                    SNMPTabelle_kopf.appendChild(neue_zeile);
Frag nich warum ich ".lastChild.parentNode" machen muss, wenn ich gleich schreiben "SNMPTabelle.appendChild" gehts nicht, dann wird die zeile quasi nie angezeigt....
 
Diesen "Fehler" kann ich dir erklären. Du brauchst im IE zwingend einen <tbody>. Firefox und Co. lassen das hinzufügen von <td> direkt in <table> zu. IE ist da ausnahmsweise mal strikter. Also macht er es genau genommen richtig.
 
ich füg doch kein td direkt hinzu sondern ein tr mit mehreren td's.
also syntaktisch ist alles richtig.
Aber er will diese blöde funktion einfach net ausführen T_T

ich hab ein kleines testscript geschrieben, welches sich genauso verhält wie meine funktion:
Code:
<html> 
<head> 
<title>test 5</title> 
<script type="text/javascript"> 
function test(obj) 
{ 
    var neue_zeile = document.createElement("tr");    
    neue_zeile.ondblclick = function()
                                    {alert("test2")};
    var neue_zelle_Text = document.createTextNode("testzeile");
    var neue_zelle = document.createElement("td");
    neue_zelle.appendChild(neue_zelle_Text);
    neue_zeile.appendChild(neue_zelle);
    obj.parentNode.appendChild(neue_zeile);
} 
</script> 
</head> 
<body> 
    <table> 
    <tr onClick="test(this)" style="border:2px solid #009900"> 
    <td>neue TABELLENZEILE erstellen</td> </tr> 
    </table> 
</body> 
</html>
geht wunderbar! jetzt frag ich mich ernsthaft wo da bei mir der fehler liegt -.-
ich versteh es einfach nicht ....
 
HTML:
<table> 
    <tbody>
        <tr onClick="test(this)" style="border:2px solid #009900"> 
        <td>neue TABELLENZEILE erstellen</td> </tr> 
    </tbody>
</table>
schon wird's gehen.
 
hilft alles nix. liegt es daran das ich bereits die Tabelle mit javascript erzeuge?
Hier mal der Code wo die tabelle erzeugt wird:
Code:
        SNMPTabelle_kopf = document.createElement("table");
        if(useIE)
        {
            SNMPTabelle_kopf.setAttribute("className","tablesettings",0);
            SNMPTabelle_kopf.id = "SNMPTabelle_kopf";
        }else
        {
            SNMPTabelle_kopf.setAttribute("class","tablesettings");
            SNMPTabelle_kopf.setAttribute("id","SNMPTabelle_kopf");
        }

            
        //Kopf der Tabelle erzeugen
        var SNMPTabelle_kopf_zeile = document.createElement("tr");
            for(i in OIDs)
            {
                var SNMPTabelle_kopf_zelle = document.createElement("th");
                if(useIE)
                    SNMPTabelle_kopf_zelle.setAttribute("width",OIDs[i]['breite'],0);
                else
                    SNMPTabelle_kopf_zelle.setAttribute("width",OIDs[i]['breite']);
                SNMPTabelle_kopf_zelle.appendChild(document.createTextNode(i));
                SNMPTabelle_kopf_zeile.appendChild(SNMPTabelle_kopf_zelle);
            }
        SNMPTabelle_kopf.appendChild(SNMPTabelle_kopf_zeile);
        SNMPTabelle_body = document.createElement("tbody");
        SNMPTabelle_kopf.appendChild(SNMPTabelle_body);
    
        SNMPInhalt.appendChild(SNMPTabelle_kopf);
    
        //um im IE den Bereich zu aktuallisieren, da sonst keine Anzeige
        if(useIE)
        {
            SNMPInhalt.innerHTML+= "";
        }
 
So wie ich das sehe, fügst du TBODY in ein TR ein. Das kann nicht klappen. Erzeug die Tabelle, ein TBODY und mach alles im TBODY.
 
schau mal genau hin, ich erzeuge eine Kopfzeile (könnte man eventtuel in ein thead packen) und danach hänge ich ein tbody ein!
Nicht das tbody in das tr ;)
 
Ok das stimmt. Wenn du deine Variablen mal besser bezeichnen würdest, dann würde man da auch durchblicken.

In jedem Fall hängst du hier <tr> direkt in <table>:
Code:
SNMPTabelle_kopf.appendChild(SNMPTabelle_kopf_zeile);

*edit*
DOM-HTML bietet im übrigen ein schönes Interface für Tabellen: https://developer.mozilla.org/en/DOM/table
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben