onclick vs. getElementsByName
loretta
- javascript
0 Harlequin0 steckl
Hallo,
die letzten (knapp) 4 Stunden sitze ich über einem Problem das nicht lebens- noch überhaupt wichtig ist, dessen Unlösung aber verzweiflungsähnliche Zustände bei mir auslöst. Mag sein, dass ich total doof bin, aber an folgender "Aufgabe" scheitere ich wiederholt:
Einige Elemente (divs) eines Dokuments, die den gleichen Namen tragen (hier: "foo") sollen sich auf einen Klick hin gleich verhalten (sprich: onclick soll auf die selbe Funktion zeigen). Da ich mit der Zeit gehe soll das dazu gehörende Script Unobfusdingsbums sein, d.h. keine eventhandler im html-text. Das Problem, ich befinde mich noch im Anfangsstadium des Erfassens des Unobfusdingsbums-Prinzips.
Überlegt habe ich mir folgendes, funktioniert trotzdem nicht:
function doSomething() {
alert("didSomething");
};
doIts = document.getElementsByName("foo");
for (i=0, len=doIts.length; i<len; i++) {
doIts[i].onclick = doSomething;
};
Ich bin mir ziemlich sicher schon Skripte gesehen zu haben in denen ein Vorgehen dieser Art funktioniert.
Mit Dank für evtl. Hilfe,
loretta
P.S.: Das Problem dass i, len und doIts globale Variablen sind ist mir bewusst, scheint mir aber nicht der Schlüssel zu sein. Ist ja nur ein Test-Skript um hinter das Prinzip von Prinzipien zu gelangen.
Yerf!
Ich bin mir ziemlich sicher schon Skripte gesehen zu haben in denen ein Vorgehen dieser Art funktioniert.
Dort waren es vermutlich aber Formularelemente und keine Divs. Denn nur für diese ist das name-Attribut erlaubt.
Alternativ könntest du mit getElementsByTagName alle Divs holen und dann in einer Schleife z.B. auf das Class-Attribut prüfen.
Gruß,
Harlequin
@@Harlequin:
Dort waren es vermutlich aber Formularelemente und keine Divs. Denn nur für diese ist das name-Attribut erlaubt.
Nö. 'map' bspw. ist ganz sicher kein Formularelement.
Live long and prosper,
Gunnar
Yerf!
Nö. 'map' bspw. ist ganz sicher kein Formularelement.
Ok, ich hab da ein paar unterschlagen...
(bei <form> könnte man jetzt wieder das Diskutieren anfangen... ;-)
Gruß,
Harlequin
Hi,
Wann werden die folgenden Zeilen aufgerufen? Existieren hier die Elemente die du ansprechen willst überhaupt schon. Am besten wäre es das ganze in eine Funktion zu packen und diese im body-Tag mit dem onload-Eventhandler aufzurufen.
Das kannst du auch irgendwie direkt im Javascript-Code machen ich glaube mit body.onload = function(){...} oder so ähnlich.
doIts = document.getElementsByName("foo");
for (i=0, len=doIts.length; i<len; i++) {
doIts[i].onclick = doSomething;
};
mfG,
steckl
Hi,
Das kannst du auch irgendwie direkt im Javascript-Code machen ich glaube mit body.onload = function(){...} oder so ähnlich.
Habs grad ausprobiert. So gehts, wenn die Funktion die bei onload aufgerufen werden soll test1 heißt:
window.onload = function(){
test1()
};
oder einfacher:
window.onload = test1;
Wenn bereits ein onload-Event vorhanden war kannst du diesen so mit-übernehmen:
http://forum.de.selfhtml.org/archiv/2006/7/t133142/#m862418
mfG,
steckl
@@steckl:
So gehts, […]
oder einfacher:
window.onload = test1;
Der Unterschied zu doIts[i].onclick = doSomething;
[OP] wäre welcher?
Warum es mit 'div' und 'name' nicht geht, hat Harlequin doch schon gesagt.
Live long and prosper,
Gunnar
Hi,
@@steckl:
So gehts, […]
oder einfacher:
window.onload = test1;Der Unterschied zu
doIts[i].onclick = doSomething;
[OP] wäre welcher?
Hier wird sicher gegangen, dass die Divs bereits existieren. Wenn man sie sonst gleich im head ansprechen will existieren die Divs noch nicht.
In test1() kann man dann den entsprechenden Divs den onclick-Event zuweisen, nachdem diese fertig geladen sind.
Oder hast du irgendwas anderes gemeint?
Warum es mit 'div' und 'name' nicht geht, hat Harlequin doch schon gesagt.
Naja, zumindest mit Firefox "geht" es. Aber es ist schon richtig, dass man es lieber anders (z.B. ueber getElementsByTagName und className) machen sollte. Aber dafür müssen die Divs auch bereits existieren.
mfG,
steckl
Hallo,
Es hat sich wohl bewahrheitet, dass ich ein wenig doof (in dieser Hinsicht) bin/war. doIts war total leer, und das Skript mal fragen ob bestimmte Variablen überhaupt irgendeinen Inhalt haben hätte mir die Frage erspart. Entschuldigt!
Dass name nicht in divs gehört... my bad! Die ..TagName feat. className Anregung ist erfolgreich aufgegriffen.
Ich danke ausführlich!
Loretta
Hi,»»
@@steckl:
So gehts, […]
oder einfacher:
window.onload = test1;Der Unterschied zu
doIts[i].onclick = doSomething;
[OP] wäre welcher?Hier wird sicher gegangen, dass die Divs bereits existieren. Wenn man sie sonst gleich im head ansprechen will existieren die Divs noch nicht.
In test1() kann man dann den entsprechenden Divs den onclick-Event zuweisen, nachdem diese fertig geladen sind.
Oder hast du irgendwas anderes gemeint?Warum es mit 'div' und 'name' nicht geht, hat Harlequin doch schon gesagt.
Naja, zumindest mit Firefox "geht" es. Aber es ist schon richtig, dass man es lieber anders (z.B. ueber getElementsByTagName und className) machen sollte. Aber dafür müssen die Divs auch bereits existieren.
mfG,
steckl