Eventhandler
fr@gma
- javascript
Hallo,
Ich habe in einer dynamisch generierten Tabelle einen genierten Link (a). Kann ich diesem gar keine EventHandler (in diesem Fall onMouseOver) als Attribute übergeben?
var verweis = document.createAttribute("onMouseOver");
verweis.nodeValue = "SetbgColors('name','farbe')";
TD2link.setAttributeNode(verweis);
Hallo fr@gma,
Ich habe in einer dynamisch generierten Tabelle einen genierten Link (a). Kann ich diesem gar keine EventHandler (in diesem Fall onMouseOver) als Attribute übergeben?
Du hast einen Link generiert, ich vermute so ähnlich:
a = document.createElement("a");
Dann schreib doch einfach:
a.onmouseover = deineMouseoverFunktion;
Da diese Vorgehensweise allerdings keine Übergabeparameter verträgt, definierst du deineMouseoverFunktion wie folgt:
function deineMousoverFunktion() {
eigentlicheMouseoverFunktion(this);
}
und
function eigentlicheMouseoverFunktion(x){
x.style.background = irgendeineFarbe;
}
Gruß Gernot
Hallo,
Ich habe in einer dynamisch generierten Tabelle einen genierten Link (a). Kann ich diesem gar keine EventHandler (in diesem Fall onMouseOver) als Attribute übergeben?
Doch. Der Eventhandler heißt im JavaScript "onmouseover" und erwartet als Inhalt keinen String, sondern eine Funktion.
http://forum.de.selfhtml.org/archiv/2004/1/69606/#m400581
http://forum.de.selfhtml.org/archiv/2004/2/73260/#m421787
viele Grüße
Axel
Doch. Der Eventhandler heißt im JavaScript "onmouseover"
Nicht doch. In JavaScript gibt’s keine Eventhandler.
Wohl aber in HTML. Dort stellen sie eine Verbindung zu Script-Sprachen – z.B. JavaScript – her. http://de.selfhtml.org/html/attribute/eventhandler.htm
und erwartet als Inhalt keinen String, sondern eine Funktion.
Für HTML ist der Wert eines Eventhandler-Attributs CDATA, also ein String. http://de.selfhtml.org/html/referenz/attribute.htm#universalattribute
Dieser String sollte aber natürlich etwas Ausführbares – z.B. JavaScript – beinhalten.
Gunnar
Hallo,
Nicht doch. In JavaScript gibt’s keine Eventhandler.
Doch, sogar in DOM http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-registration.
Für HTML ist der Wert eines Eventhandler-Attributs CDATA, also ein String.
Für HTML schon. Der Parser übergibt den String dann dem JavaScript-Interpreter und der interpretiert ihn als Script.
Es ging aber darum, wie man das Attribut "onmouseover" mit JavaScript so setzen kann, dass es alle modernen Browser als Eventhandler behandeln. Und für JavaScript ist der Inhalt des Attributes "onmouseover" _kein_ String.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Eventhandler in JavaScript</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<p id="myP" onMouseOver="this.style.backgroundColor='#00AEAD'">Test</p>
<script type="text/javascript">
<!--
var p = document.getElementById("myP")
p.onmouseout = function() {this.style.backgroundColor='#FFF';}
document.write("onmouseover = Typ:" + typeof(p.onmouseover) + "; Inhalt:" + (p.onmouseover).toString() + "<br>");
document.write("onmouseout = Typ:" + typeof(p.onmouseout) + "; Inhalt:" + (p.onmouseout).toString() + "<br>");
//-->
</script>
</body>
</html>
viele Grüße
Axel
Nicht doch. In JavaScript gibt’s keine Eventhandler.
Doch, sogar in DOM http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-registration.
Axel,
Auf der gesamten Seite taucht nicht einmal "JavaScript" auf.
Die Eventhandler gehören nicht zu JavaScript, sondern noch zu HTML. Wenn das entsprechende Ereignis eintritt, wird ein Script aufgerufen. Das muss nicht JavaScript sein.
Gunnar
Hallo,
Die Eventhandler gehören nicht zu JavaScript, sondern noch zu HTML. Wenn das entsprechende Ereignis eintritt, wird ein Script aufgerufen. Das muss nicht JavaScript sein.
Ja und? Was hat das mit dem zu lösenden Problem zu tun? Das Problem war: "Wie kann man mit JavaScript einen in Browsern funktionierenden Eventhandler für HTML-Elemente setzen?"
Deine Antwort ist also: "Das geht nicht."
Meine Antwort ist: "Das geht, wie von mir beschrieben."
viele Grüße
Axel
Deine Antwort ist also: "Das geht nicht."
Nein, ich hatte mich ehrlich gesagt nicht wirklich dem Problem zugewandt und dein »Der Eventhandler heißt im JavaScript "onmouseover"« falsch gedeutet.
Sorry,
Gunnar
Hallo,
Der Eventhandler heißt im JavaScript "onmouseover" und erwartet als Inhalt keinen String, sondern eine Funktion.
Einige Browser erlauben durchaus das Setzen von on*-Attributen als Attribute (nicht nur als Eigenschaften von Elementobjekten). Somit lässt sich unter Umständen ein Event-Handler als String notieren, siehe etwa </archiv/2004/6/82376/#m480771>.
Das das Ganze sowieso nur pseudo-standardisiert ist, ist es im Prinzip genauso sinnig wie die klassische Methode mit einem Funktionsobjekt. Das angesprochene DOM Events arbeitet gar nicht mehr mit HTML-Attributen bzw. deren entsprechenden Objekteigenschaften, daher kommen dort nur noch Funktionsobjekte zum Einsatz.
Mathias
Hallo,
Einige Browser erlauben durchaus das Setzen von on*-Attributen als Attribute (nicht nur als Eigenschaften von Elementobjekten). Somit lässt sich unter Umständen ein Event-Handler als String notieren, siehe etwa </archiv/2004/6/82376/#m480771>.
Ja, das ist wohl davon abhängig, wie im Parser die Zusammenarbeit mit dem JavaScript-Interpreter programmiert ist. Es gibt da wohl zwei Ansätze:
1. Wenn mit DHTML Attribute von HTML-Elementen geändert bzw. gesetzt werden, so werden diese vom Parser gehandhabt, wie Attribute, welche schon im HTML-Quelltext stehen. Auch Attribute mit %SCRIPT-Inhalt werden erst geparst und dann dem Script-Interpreter überlassen. - Gecko, Opera
2. Wenn mit DHTML Attribute von HTML-Elementen geändert werden und es handelt sich um Attribute deren Inhalt als %SCRIPT interpretiert werden muss, so werden diese vom Parser ignoriert und direkt dem Script-Interpreter überlassen. - MSIE
viele Grüße
Axel
Hallo.
Das das Ganze sowieso nur pseudo-standardisiert ist, ist es im Prinzip genauso sinnig wie die klassische Methode mit einem Funktionsobjekt.
Ernst gemeint: "Da" oder "Dass"?
MfG, at