Eventhandler in DOM einhängen
Marcus
- javascript
Liebe Runde,
ich versuche einen Event Handler mit Aufruf als Attribut/Value Pärchen in ein HTML-Element einzuhängen. Der Handler löst danach aber nicht aus und ich hab das Gefühl den Wald vor lauter Bäumen nicht zu sehen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script>
function Init() {
var Eigenschaft = document.createAttribute("onclick");
Eigenschaft.nodeValue = "javascript:alert('test')";
document.getElementById("testbereich").setAttributeNode(Eigenschaft);
}
</script>
</head>
<body onload="Init()">
<br>
<div id="testbereich">testdiv</div>
</body>
</html>
Danke für jeden Tipp!
Marcus
n'abend,
function Init() {
var Eigenschaft = document.createAttribute("onclick");
Eigenschaft.nodeValue = "javascript:alert('test')";
document.getElementById("testbereich").setAttributeNode(Eigenschaft);
}
versuchs doch mal so:
function Init()
{
document.getElementById('testbereich').onclick = function(){ alert('test'); };
}
weiterhin schönen abend...
Schönen Abend zurück!
Vielen Dank, nur aus Neugierde:
Klappt die Einbettung eines Handlers als Attribut grundsätzlich nicht?
Viele Grüße
Hallo,
Klappt die Einbettung eines Handlers als Attribut grundsätzlich nicht?
Doch, das müsste grundsätzlich klappen, praktisch aber nicht browserübergreifend.
http://forum.de.selfhtml.org/archiv/2006/8/t134355/#m872661
Mathias
n'abend,
Vielen Dank, nur aus Neugierde:
Klappt die Einbettung eines Handlers als Attribut grundsätzlich nicht?
"eigentlich schon". Der IE zickt (wie würde man es auch anders erwarten) ein wenig rum. setAttribute('onclick') ist eben nicht setAttribute('onClick'). Da gibts gewisse Attribute die der IE nur bei ihm genehmer Schreibweise versteht. Da ich mir nie merken kann welche Attribute er nicht mag, nutze ich setAttribute nur dort, wo es wirklich notwendig ist.
weiterhin schönen abend...
Vielen Dank, nur aus Neugierde:
Klappt die Einbettung eines Handlers als Attribut grundsätzlich nicht?"eigentlich schon". Der IE zickt (wie würde man es auch anders erwarten) ein wenig rum. setAttribute('onclick') ist eben nicht setAttribute('onClick'). Da gibts gewisse Attribute die der IE nur bei ihm genehmer Schreibweise versteht. Da ich mir nie merken kann welche Attribute er nicht mag, nutze ich setAttribute nur dort, wo es wirklich notwendig ist.
Soweit ich das mitbekommen habe betrifft das i.d.R. die Attribute, die ein Objekt bereits besitzt. Keine Ahnung was der IE da macht, aber object.id = ... ist was anderes als object.setAttribute('id', '....');
Wenn du ein Objekt mit createElement erzeugt hat es schon eine ganze Menge Eigenschaften (z.b. onclick, id, style usw.) insofern der Aufruf von createAttribute soweiso schon überflüssig.
Von daher würde ich auch von der Verwendung der ganzen Attribute Funktionen abraten, erst ab dem Moment wo man selbstdefinierte Attribute verwendet muss man sie einsetzen.
Struppi.
Hallo,
Von daher würde ich auch von der Verwendung der ganzen Attribute Funktionen abraten, erst ab dem Moment wo man selbstdefinierte Attribute verwendet muss man sie einsetzen.
Muss man nicht.
Selbstdefinierte Attribute sind nur dann nötig, wenn man tatsächlich echte Attribute braucht - i.d.R. dann, wenn man den DOM-Knotenbaum wieder serialisieren will, also nachträglich wieder mit innerHTML/outerHTML herumfummeln will. (Oder wenn das Dokument, an dem per DOM gearbeitet wird, nicht das gegenwärtige, sondern ein mit XMLHttpRequest o.ä. geladenes ist.)
In den anderen Fällen will man einfach willkürliche Daten an einen Elementknoten hängen, dafür braucht man getAttribute/setAttribute nicht. An ein Knotenobjekt kann man glücklicherweise jedes JavaScript-Objekt hängen, während Attribute immer Strings sind.
Lustigerweise erzeugt sowohl elem.setAttribute("mein", "attribut") als auch elem.meine = "eigenschaft" im IE ein reguläres Attribut, das beim Serialisieren auftaucht (meine="eigenschaft" mein="attribut") und über getAttribute auslesbar ist. Das gilt allerdings nur für den IE und Voraussetzung ist, dass es sich um einen String handelt.
Mathias
Hallo Marcus,
häng ihn einfach direkt an das Element:
document.getElementById("testbereich").onclick = function() { window.alert("test"); };
Mit freundlichem Gruß
Micha
Hi,
document.getElementById("testbereich").onclick = function() { window.alert("test"); };
dem originalen Code entsprechend muss es heißen:
~~~javascript
document.getElementById("testbereich").onclick = function() { javascript:window.alert("test"); };
So viel Zeit muss sein.
Cheatah
Hi,
document.getElementById("testbereich").onclick = function() { window.alert("test"); };
>
> dem originalen Code entsprechend muss es heißen:
>
> ~~~javascript
> document.getElementById("testbereich").onclick = function() { javascript:window.alert("test"); };
>
So viel Zeit muss sein.
Cheatah
;)
Hallo Cheatah,
dem originalen Code entsprechend muss es heißen
Macht das Sinn?
Mit freundlichem Gruß
Micha
Hi,
dem originalen Code entsprechend muss es heißen
Macht das Sinn?
natürlich machte der originale Code keinen Sinn, aber wenn schon eine bitte-nicht-nachdenken-Lösung gepostet wird - also fertiger Code - dann doch bitte wenigstens originalgetreu.
Cheatah