Wie Scrolling verhindern bei Klick auf Link
Thomas Barth
- html
1 noscript0 Gernot Back
0 noscript
Hallo,
ich verwende eine Tabelle, die u.a. unsichtbare Tabellenzeilen enthält. Mit Hilfe von Javascript und CSS kann ich diese Zeilen auf und ein- und ausblenden. Wenn ich auf das Symbol zum Auf/Zuklappen klicke, soll die Seite nicht gescrollt werden.
Wenn ich nur # verwende, scrollt die Seite immer an den Anfang, sofern sie nicht am Anfang steht
<a href="#" onClick="javascript:showOperatorInfo('notesrow0', 'plusminus0')"><img...
Bei Verwendung von Sprungzielen scrollt die Seite zum Sprungziel, der Teil über dem Sprungziel ist dann meist nicht zu sehen. Hier hatte ich aber angenommen, dass die Seite nicht gescrollt wird, da beim Klick auf den Link sich das Sprungziel ja bereits im sichtbaren Teil befindet.
<a name="marker0"><a href="#marker0" onClick="javascript:showOperatorInfo('notesrow0', 'plusminus0')"><img...
Die Seite soll einfach stehen bleiben, wenn ich auf den Like klicke, geht das?
Gruß,
Thomas B
die Lösung ist einfach: nutze keinen Link
aus der absurden Konstruktion
<a name="marker0"><a href="#marker0" onClick="javascript:showOperatorInfo('notesrow0', 'plusminus0')"><img...
mache entsprechend einfach
<img src="..." alt="..." onClick="showOperatorInfo('notesrow0', 'plusminus0')">
Hallo noscript,
aus der absurden Konstruktion
<a name="marker0"><a href="#marker0" onClick="javascript:showOperatorInfo('notesrow0', 'plusminus0')"><img...
Absurd ist in der Tat das Label "javascript:" im Onclick-Eventhandler, wo der doch ohnehin weiß, dass er nichts anderes als Javascript sein kann.
Auch das völlig invalide Ineinanderschachteln zweier A-Elemente wäre absurd, wenn es nicht nur ein Copy&Paste-Fehler des OP wäre.
Dass aber ein Element, das auf der Seite etwas auf- und/oder zuklappt, ein Link ist, finde ich nur natürlich: Man will so etwas ja auch mit entsprechendem Cursor-Händchen anzeigen.
Gut, das könnte man auch über cursor:pointer
bei jedem Element, aber spätestens, wenn ein zusätzlicher Hover-Effekt gewünscht ist, würde der IE ja streiken und damals bis Netscape 4 ging Javascript ja sowieso nur auf Links.
Langer Rede kurzer Sinn: Um das Hochspringen der Seite zu unterbinden, muss die im Clickhandler eines Links aufgerufene Funktion einfach nur "false" zurückgeben und sie selbst mit "return" aufgerufen werden. Mit einem mit Semikolon angehängten "return false" im Clickhandler geht es auch und ebenfalls mit einem über Pseudoprotokoll "javascript:" aufgerufenen "void(0)" im HREF-Attribut, welch letzteres allerdings bei deaktiviertem Javascript zur Anzeige unschöner, "nicht verfügbarer" Seiten führt.
Gruß Gernot
Hallo Gernot,
Gut, das könnte man auch über
cursor:pointer
bei jedem Element, aber spätestens, wenn ein zusätzlicher Hover-Effekt gewünscht ist, würde der IE ja streiken und damals bis Netscape 4 ging Javascript ja sowieso nur auf Links.
Den zusätzlichen Hover-Effekt bekommst du bei einer Seite, die sowieso aktiviertes JavaScript verlangt, auch für den IE hin mit den guten alten onmouseover/out-Events.
Und Netscape 4 empfinde ich nicht wirklich mehr als ernstzunehmendes Argument. Mindestens die Hälfte aller Ratschläge hier in diesem Forum berücksichtigt diesen Browser nicht mehr.
Insofern sehe ich wirklich keinen Grund hier einen Link zu missbrauchen.
Gruß noscript
Hallo noscript,
Den zusätzlichen Hover-Effekt bekommst du bei einer Seite, die sowieso aktiviertes JavaScript verlangt, auch für den IE hin mit den guten alten onmouseover/out-Events.
Kurios, dass ausgerechnet du mit deinem Spitznamen so ein Verfechter von Skripten bist, dabei ist nach meinem Dafürhalten CSS gegenüber JavaScript immer zu bevorzugen, wenn man die Wahl hat.
Bei JS-Mouseout-Events kommt der lästige Umstand hinzu, dass sie auch beim Betreten von enthaltenen Kindelementen eintreten, ohne dass man das Mutterelement verlässt. Mit CSS-Hover passiert das nicht.
Gruß Gernot