strange: manchmal passiert bei OnClick nix...
MJ
- javascript
Hallo,
ich hab da ein Problem und ich hab keine Ahnung, ob ich was falsch mache oder ob das an JavaScript liegt und zwar:
ich hab einen ganz normalen OnClick Handler, der einen unsichtbaren Layer sichtbar machen soll...so als Menu quasi. Nun passiert meistens das Richtige, aber manchmal wenn ich auf das Image klicke (das welches den Event Handler hat), passiert gar nix. Beim nächsten Klick gehts dann meistens wieder. Woran kann denn das liegen? ich hab auch mal versucht die Clicks zu zählen und die Clicks bei denen es schief geht werden nicht mitgezählt, d.h. da wird der OnClick Handler gar nicht erst aufgerufen. Why??? Bin ratlos! Wär sehr cool, wenn mir da jemand helfen könnte :-)
Danke
MJ
Hi, versuche mal href="javascript:FUNCTION()" das hat bei mir immer geklappt wenn der onClick auf nem layer nicht wollte.
Grüße,
Torsten
ich hab einen ganz normalen OnClick Handler, der einen unsichtbaren Layer sichtbar machen soll...so als Menu quasi. Nun passiert meistens das Richtige, aber manchmal wenn ich auf das Image klicke (das welches den Event Handler hat), passiert gar nix. Beim nächsten Klick gehts dann meistens wieder. Woran kann denn das liegen? ich hab auch mal versucht die Clicks zu zählen und die Clicks bei denen es schief geht werden nicht mitgezählt, d.h. da wird der OnClick Handler gar nicht erst aufgerufen. Why??? Bin ratlos! Wär sehr cool, wenn mir da jemand helfen könnte :-)
ich hab einen ganz normalen OnClick Handler, der einen unsichtbaren Layer sichtbar machen soll...so als Menu quasi. Nun passiert meistens das Richtige, aber manchmal wenn ich auf das Image klicke (das welches den Event Handler hat), passiert gar nix. Beim nächsten Klick gehts dann meistens wieder. Woran kann denn das liegen? ich hab auch mal versucht die Clicks zu zählen und die Clicks bei denen es schief geht werden nicht mitgezählt, d.h. da wird der OnClick Handler gar nicht erst aufgerufen. Why??? Bin ratlos! Wär sehr cool, wenn mir da jemand helfen könnte :-)
Dieses Problem taucht bei mir nicht auf.
Was hast du den getan ob dein Problem zu lösen?
Nach deiner Beschreibung, hättest du z.b. mal sowas ausprobieren müssen:
<a href="#" onclick="alert('click');return false">test</A>
so, und jetzt drauf klicken und sagen wann das alert fenster kommt und wann nicht, vieleicht kommen wir deinen Problem ein wenig näher.
Wenn nicht, hilft dir vielleicht mal ein Blick hierher http://glasgoogle.de, da deine Fehlerbebschreibung doch etwas unzureichend ist.
Struppi.
ok ich hab verstanden :-) dann versuch ich mal mein Problem genauer zu beschreiben..
also...im Grunde genommen hab ich gar kein Problem...das Menu funktioniert einwandfrei. Bei Klick auf ein Image wird ein OnClick Handler ausgelöst, der einen Bereich, der mit dem div-Tag spezifiziert wird, sichtbar machen soll. Das mache ich über eine JavaScript-Funktion, die abfragt ob der Bereich mit einer "id", die ich der Funktion übergebe, "visible" ist oder nicht.
Das funktioniert auch wirklich gut. Aber manchmal klicke ich auf dieses Image und es passiert einfach nix. Und meine Frage hat eigentlich in die Richtung gezielt, ob es sein kann, dass dieser OnClick Handler in manchen Situationen nicht ausgelöst wird. Vielleicht klicke ich auch nur zu schnell hintereinander auf das Image.
Folgendes hab ich bis jetzt versucht:
ich habe den OnClick Handler einmal in den img-Tag und einmal in einen a-Tag verfrachtet. Im a-Tag hab ichs auf beide Arten versucht, die ihr mir vorgeschlagen habt. Die erste mit href=javascript:FUNCTION()" hat auch nicht funktioniert. Das Alert-Fenster wird aber immer aufgerufen komischerweise. Ich dachte mir, dass das echt daran liegen kann, dass ich das Image "zu schnell" klicke. Und wenn das Alert-Fenster aufgeht muss ich es ja erstmal wieder zu machen, so dass ich nicht "schnell" klicken kann. (oh mann ich hoffe irgendwer versteht denn müll, den ich hier schreibe).
Was ich auch schon versucht habe: Die Funktion, die meinen div-Bereich sichtbar machtm, ersetzt durch eine ganz einfache Funktion, die einfach die Klicks zählt, die durch den Handler ausgelöst werden. Hier habe ich festgestellt, dass nicht alle Klicks von dem Handler verarbeitet werden. Und ich würde zu gerne wissen wieso.
ok, ich hoffe wirklich, dass das jetzt ein bißchen klarer war. Wenn nicht, dann sagts mit bitte und ich versuch's nochmal :-)
Danke auf jeden Fall für eure Mühen
Ciao, MJ
ok ich hab verstanden :-) dann versuch ich mal mein Problem genauer zu beschreiben..
[... lange Erklärung]
ok, ich hoffe wirklich, dass das jetzt ein bißchen klarer war. Wenn nicht, dann sagts mit bitte und ich versuch's nochmal :-)
ja schon. Du hast recht es kann sein, dass du zu schnell klickst, das hängt aber davon ab was (und auch wie) dein Skript macht. Aufwendige dHTML Sachen brauchen ihre Zeit und wenn du auch noch dynamisch mit z.b. mit innerHTML Code erzeugst, ist es sogar sehr wahrscheinlich, dass du schneller klickst als der Browser dafür braucht das darzustellen.
Aber ohne konkret zu Wissen was du machst ist dies nur Spekulation.
Struppi.
ok, sorry, muss vielleicht noch einiges lernen was posten in Forums angeht...
das ist meine JavaScript-Funktion:
Parameter: die ID eines div-Bereichs, die ID eines Images (Button)
function showhide(div,img) {
if (div.style.display=='none' &&
div.style.visibility=='hidden') {
div.style.display='block';
div.style.visibility='visible';
img.src='arrow_button_top.gif';
}
else {
div.style.display='none';
div.style.visibility='hidden';
img.src='arrow_button_bottom.gif';
}
}
im HTML siehts so aus:
<table> ...enthält das gesamte Menu mit allen Obermenu-Punkten
<img src=".." id="id_img" OnClick="showhide(id_div, id_img)"></img>
<div id="id_div" style="display:none;visibility:hidden;">
... hier is eine Tabelle die meine UnterMenu-Struktur zu einem
bestimmten OberMenu-Punkt enthält
</div>
</table>
Bei Klick auf das Image wird der OnClick ausgelöst und der div-Bereich sollte sichtbar bzw. unsichtbar werden. Tut er auch, aber eben nicht immer. Hilft dir das weiter?
das ist meine JavaScript-Funktion:
Parameter: die ID eines div-Bereichs, die ID eines Images (Button)
was ist div? du rufst es unten auf mit
showhide(id_div, id_img)
Normalerwiese sollte der Broswer nicht Wissen was du mit id_div und id_img meinst, da diese nirgendwo definiert sind (der IE tut es vielleicht, aber das ist ein fehlerhaftes verhalten - den er rät lediglich was du meinst).
du musst erst eine Referenz auf die Objekte erzeugen/holen.
z.b. mit geElementById()
function showhide(div,img) {
if (div.style.display=='none' &&
div.style.visibility=='hidden') {
div.style.display='block';
div.style.visibility='visible';
img.src='arrow_button_top.gif';
}
else {
div.style.display='none';
div.style.visibility='hidden';
soweit ich das weiß reicht display none/block und visibility = 'visible' da das Element ja bei display='none'
nicht angezeigt werden sollte.
Bei Klick auf das Image wird der OnClick ausgelöst und der div-Bereich sollte sichtbar bzw. unsichtbar werden. Tut er auch, aber eben nicht immer. Hilft dir das weiter?
Ich vermute mal, das es eben ein wenig länger dauert, wenn der browser erst raten muss was du meinst, vielleicht bessert es sich schon, wenn du die richtige Referenz holst.
Vielleicht kannst du auch mal eine Seite zeigen, wo du das Skript eingebaut hast, dann kann man sich das auch angucken, da es bei Timeing Problemen natürlich immer schwer ist zu sagen wo der Fehler liegt.
Struppi.
naja, id_div und id_img sind halt die id-namen des div-Bereichs und des Images, respektive. Das müsste doch eigentlich reichen, oder? Der Browser müsste dann doch diese Elemente über ihre id identifizieren können. Wenn das nicht so ist, hab ich irgendwas sehr lange ganz falsch verstanden :-)
leider kann ich dir grade im moment keine seite zeigen, weil das grade nur innerhalb eines intranets läuft. ich versuche aber mal eine dummy seite zu basteln oder so...
naja, id_div und id_img sind halt die id-namen des div-Bereichs und des Images, respektive. Das müsste doch eigentlich reichen, oder? Der Browser müsste dann doch diese Elemente über ihre id identifizieren können. Wenn das nicht so ist, hab ich irgendwas sehr lange ganz falsch verstanden :-)
ja offensichtlich. Die id oder Name dienen dazu ein element zu bezeichnen.
Was passiert wenn du folgendes machst:
<script type="text/javascript">
test = "variabel";
</script>
<img src="1.gif" name="test"><br>
<img src="2.gif" id="test">
<a href="#" onclick="alert(test.src);">test</A><br>
<a href="#" onclick="alert(window.test);">window.test</A><br>
<a href="#" onclick="alert(window.document.test);">window.document.test</A><br>
<a href="#" onclick="alert(self.test);">self.test</A><br>
<a href="#" onclick="alert(getElementById('test').src);">getElementById('test').src</A><br>
tja, und hier hat der IE ein Problem, zumindest meiner kann nicht zwischen der ID und dem Namen unterscheiden und gibt als Ergebniss den Source des 1. Bildes aus. was aber nicht sein darf, da dieses keine ID hat und ich ja auch das 2. Bild ansprechen will.
Struppi.
Hallo!
<img src=".." id="id_img" OnClick="showhide(id_div, id_img)"></img>
Versuch mal onClick, nicht OnClick. Ist IMHO case-sensitiv.
Gruß
mdkiller
<img src=".." id="id_img" OnClick="showhide(id_div, id_img)"></img>
Versuch mal onClick, nicht OnClick. Ist IMHO case-sensitiv.
Nein.
Javascript ist case sensitive aber nicht HTML.
Struppi.