Messenger: Betreff-Link ordentlich verlinken

theHacker

sieht vor lauter Ads den Content nicht mehr
Teammitglied
ID: 69505
L
20 April 2006
22.682
1.316
Nervt mich schon länger:
Seit Umgestaltung des Messengers kann man eine Nachricht nicht mehr normal öffnen, da der Link im Betreff nur auf "#" verweist.
 
Du meinst in einem neuen Fenster?
Das geht nicht weil das alles über die JS-Engine redirected ...

Wenn ich den Link jetzt auch noch verlinke (die Tabel hat schon ein onClick) dann springt der Link UND das onClick der Table an und man hat nen Doppel-redirect. Hab bisher keine Lösung gefunden das zu beheben. :-?

HTML:
<td class="betreff" onClick="javascript:readmsg('2096381');">
<a href="#" class="msg" title="Re^2: bild im forum">Re^2: bild im forum</a>
</td>
Gesucht: if(link_klicked)
ignore_onlick_events_von übergeordneten_elementen()

Edit: Das Problem ist, dass nicht dterministisch vorhersagbar ist, ob HREF oder OnClick zuerst ausgeführt wird. Je nach Browser und gut Dünken.
 
Edit: Das Problem ist, dass nicht dterministisch vorhersagbar ist, ob HREF oder OnClick zuerst ausgeführt wird. Je nach Browser und gut Dünken.

return false; am Ende deines JavaScript-Codes. Und das click-Event des Links muss per Definition eigentlich vor dem "href" ausgeführt werden. Denn der Seitenwechsel des Browsers wird ja genaugenommen auch "onclick" ausgeführt. Und dann hangelt sich der Browser im DOM nach oben und prüft, ob noch click-Events irgendwo gesetzt sind.

Also: a->onclick, a->href, td->onclick (rein theoretisch).

Um das Event-Bubbling zu verhindern gibt es auch eine Funktion: e.stopPropagation().

Greetz

paddya
 
Zuletzt bearbeitet:
return false; am Ende deines JavaScript-Codes.
Korrigier mich, aber ein return false; wirkt doch nur am Ende der Ausführung des JS vorher ... ich möchte ja überhaupt nicht, dass JS ausgeführt wird. In dem Link an sich hab ich auch kein onClick-Event. Ich klick auf HREF und damit sollte das onClick der Table-Cell igoriert werden, da ja bereits eine Weiterleitung erfolgt.

Oder meinst Du ein OnClick = return false, in den Link, sodass das vor dem HREF ausgeführt wird und die JS engine sozusagen "stoppt", sodass der Onclick der Table gar nicht mehr ausgeführt wird?

:gloerf:
 
Das was ich dir gestern im ICQ vorgeschlagen hatte geht übrigens doch - es werden nicht alle onClicks gleichzeitig ausgeführt (wie auch ;)), sondern das innerste zuerst:

HTML:
<script>
var disable_foo = false;
function muh(){ disable_foo = true; alert("muh()"); }
function foo(){ if(disable_foo == false){ alert("foo()"); } }
</script>

<table>
<tr><td onclick="javascript:foo();"><a href="a.html" onclick="javascript:muh()">dsgsgd</a></td></tr>
</table>
Ergebnis hier: Es wird nur muh() in einer Alert ausgegeben, dann gehts zu a.html
 
HTML:
<script>
var disable_foo = false;
function muh(){ disable_foo = true; alert("muh()"); }
function foo(){ if(disable_foo == false){ alert("foo()"); } }
</script>
Ah ok wenn der innere tatsächlich zuerst kommt, dann deckt sich ja dann mit meiner "Idee" ...
Oder meinst Du ein OnClick = return false, in den Link, sodass das vor dem HREF ausgeführt wird und die JS engine sozusagen "stoppt", sodass der Onclick der Table gar nicht mehr ausgeführt wird?
 
Zumindest in IE/FF/Chrome ... ich nehme aber an, wenn das dort einheitlich ist, wird das wohl allgemein so sein - Opera habe ich allerdings nicht zum Testen drauf.

Das ist sogar ein Standard, wenn mich nicht alles täuscht.

PHP:
    function stopEvents(event) {
        event.cancelBubble = true;
        if(event.stopPropagation)        
            event.stopPropagation();
    }

und dann einfach:

HTML:
<table>
<tr><td onclick="javascript:foo();"><a href="a.html" onclick="stopEvents(event); return true;">dsgsgd</a></td></tr>
</table>

Sollte funktionieren und wäre auch die sauberere Lösung :)

Edit: Das mit dem return false; am Ende des JavaScripts war natürlich Blödsinn ;)

Greetz

paddya
 
Zuletzt bearbeitet: