Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

onclick event verhindern

Hallo,

Ich habe eine html Tabelle in der ich auch Formularelemente darstellen kann (inputs, checkboxen...). Jedes <tr> Element der Tabelle hat ein onclick event um eine url aufzurufen. Wenn ich nun in ein input Feld etwas eingeben moechte, wird automatisch das onclick event in dem dahinterliegenden <tr> ausgeloest. Dieses moechte ich verhindern. Folgendes habe ich:

Code:                   In Zwischenablage kopieren (nur IE)
1">

und in dem input Feld dann

Code:                   In Zwischenablage kopieren (nur IE)
2">

Nun muesste ich das onclick im <tr> noch wieder reaktivieren, denn wenn ich einmal in input war, kann ich nicht mehr in das dahinterliegende <tr> reinklicken, bzw. es tut sich nichts mehr.

Mit onmouseout wird sofort die url aufgerufen und mit onblur geht es auch nicht, kann mir da einer weiterhelfen?
Hier gehts zum Orginal Eintrag "onclick event verhindern" im Forum

Antworten

also in deinem Code blicke ich nicht ganz durch.
Ich würde es so in der Art machen:
Code:                   In Zwischenablage kopieren (nur IE)
3">

und in Html dann halt ein 'true' übergeben wo die Funktion laufen soll, und ein 'false' wo sie nicht laufen soll.

Edit: Ah jetzt weiß ich was du willst.
Es soll also das TR Feld weiterhin seine onClick Fuktionalität behalten, die Formularelemente darin aber ignoriert werden...
Dass die TR's nicht mehr gehen, wenn du erstmal im Forumlar warst ist logisch, weil du ihnen ja das onClick Event zufor weggenommen hast. Also gibt es ihnen wieder zurück! Am besten mit einem onBlur innerhalb des Formularelements oder einer weiteren Funktion, die eben von den Checkbocken oder sonst etwas aktiviert wird.


2.

Genau das habe ich versucht.

Code:                   In Zwischenablage kopieren (nur IE)
4">

Das funktioniert dann bei einer Checkbox und deren tr, aber wenn ich dann eine andere Checkbox anklicke, wird dort der onclick nicht mehr verhindert.


3.

Wochenende vorbei und ich hab noch keine Loesung gefunden, noch einer ne Idee?


4.

Zitat:
phil0r postete
Wochenende vorbei und ich hab noch keine Loesung gefunden, noch einer ne Idee?
Du hast ein Problem mit dem Event-Bubbling. Das kannst Du stoppen mit stopPropagation() (nach W3C) bzw. mit cancelBubble (IE).

Ältere Browser können ggf. weder das eine, noch das andere. Ein Workaround wäre, beim INPUT-onclick-Event (oder onfocus-Event?) eine (globale) Variable true zu setzen, die im TR-onclick-Event abgefragt wird - und im onblur-Event diese Variable wieder false zu setzen.


5.

Code:                   In Zwischenablage kopieren (nur IE)
5">

loest das Problem.


6.

[quote]phil0r postete
Code:                   In Zwischenablage kopieren (nur IE)
6">

loest das Problem.[/quote] Man kann vor dem Setzen von cancelBubble noch Abfragen, ob der Browser es überhaupt unterstützt: else if(typeof(e.cancelBubble)=="boolean")

Aber wie gesagt: Z.B. der IE 5.5 sollte es bereits unterstützen, kennt auch cancelBubble, verhindert aber trotzdem nicht das blubbern. Da der aber noch im Einsatz ist (und bleiben wird, solange Firmen & Behörden noch WinNT einsetzen), empfiehlt sich in "ernsthaften" Projekten diesbezüglich wohl eher ein manueller Workaround ... :(


7.

Hatte gehofft dass zumindest der 5.5 das schafft.. Naja. Bin mit js nicht ganz so vertraut, wie setz ich denn eine globale Variable?


8.

Zitat:
phil0r postete
wie setz ich denn eine globale Variable?
Variablen außerhalb von Funktionen sind immer global.

Und innerhalb von Funktionen sind sie global, wenn man var wegläßt. Also z.B.

Code:                   In Zwischenablage kopieren (nur IE)
7">

Oder man spricht sie direkt als das an, was sie sind: Unterobjekte von window, also um beim Beispiel zu bleiben: window.myGlobalVar=true oder besser: window["myGlobalVar"]=true

PS: hach, OOP ist was feines ... ;)


9.

Alles klar. Frag ich mich nun noch, ich hoffe ich habe die Logik von Propagation und Bubble verstanden, ob die unterschiedliche Reihenfolge mir da nicht zwischenfunkt. Wenn im mozilla zuerst das onclick der Checkbox ausgefuehrt wird und ich die var da setze, kann ich sie danach beim onclick des tr ja abfragen. Aber im ie muesste das onclick des tr ja zuerst kommen oder?


10.

Mach im input:

Code:                   In Zwischenablage kopieren (nur IE)
8">

Dadurch sollte das onclick-event nicht weiter an die parents übertragen werden.


11.

Zitat:
phil0r postete
Aber im ie muesste das onclick des tr ja zuerst kommen oder?
Nein, es blubbert immer
von unten nach oben (bzw. vom inneren Element zum äußeren). Das im Wasser genauso, wie in allen Browser ... ;)


12.

Zitat:
DASPRiD postete
Dadurch sollte das onclick-event nicht weiter an die parents übertragen werden.
Nein, das verhindert nur, daß zusätzlich zum JS-Code ggf. auch noch der HTML-Code ausgeführt wird (falls beim Click diesbezügl. irgendwas passieren soll). Das hat aber mit dem (JS-only) Event-Bubbling nichts zu tun.


13.

Ich hab das hier heut nochmal im ie 5.5 getestet
Code:                   In Zwischenablage kopieren (nur IE)
9">

und es geht.


14.

Zitat:
phil0r postete
Ich hab das hier heut nochmal im ie 5.5 getestet
(...) und es geht.
Gut zu wissen, daß es auch 5.5er gibt, auf denen es klappt (sollte es ja auch).

Schlecht zu wissen, daß es 5.5er geben kann, auf dem das nicht so ist - und nicht zu wissen, woran das liegt. :(


15.

Zitat:
Ich postete
Schlecht zu wissen, daß es 5.5er geben kann, auf dem das nicht so ist - und nicht zu wissen, woran das liegt. :(
Hab's noch mal getestet - auch der hiesige 5.5er kann das (weiß der Teufel, was ich mir seinerzeit zusammenpfuscht hatte :oah:)

Aber:

[quote]phil0r postete
Ich hab das hier heut nochmal im ie 5.5 getestet
Code:                   In Zwischenablage kopieren (nur IE)
10">

und es geht.[/quote] ... das funktioniert schon, weil der IE 5.5 e nicht definiert hat - und damit die Script-Verarbeitung generell (und mit Fehlermeldung) abbricht. ;)

Korrekt sieht es so aus:

Code:                   In Zwischenablage kopieren (nur IE)
11">




Hier gehts zum Orginal Eintrag "onclick event verhindern" im Forum
 
phpforum.de | Impressum