JavaScript-Funktion in href vs. onclick
Möchte ich ausführen einer einfachen JavaScript-Funktion auf einen Klick ohne eine Umleitung.
Gibt es da einen Unterschied oder Vorteil zwischen Umsetzung der JavaScript-Aufruf in die href
Attribut (wie dieser:
<a href="javascript:my_function();window.print();">....</a>
) vs. man es in den onclick
Attribut (Bindung an die onclick
event)?
Kommentar zu dem Problem
Diese Frage wurde schon besprochen: stackoverflow.com/questions/245868/...
InformationsquelleAutor der Frage SkunkSpinner | 2009-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen die onclick im href verstoßen würde diejenigen, die glauben, stark in der Trennung von Inhalt und Verhalten/handeln. Das argument ist, dass der html-Inhalt sollte jedoch konzentriert sich ausschließlich auf Inhalte, nicht auf Präsentation oder Verhalten.
Der typische Weg in diesen Tagen, ist die Verwendung einer javascript-Bibliothek (zB. jquery) und erstellen Sie einen event-handler mit, dass die Bibliothek. Es würde so Aussehen:
InformationsquelleAutor der Antwort Parand
schlecht:
gut:
besser:
noch besser 1:
noch besser 2:
Warum besser? da
return false
wird verhindern, dass der browser folgenden linkbeste:
JQuery oder anderen ähnlichen Rahmen zu befestigen onclick-handler durch das element ID.
InformationsquelleAutor der Antwort demp
In Bezug auf javascript, ein Unterschied ist, dass die
this
Schlüsselwort in deronclick
handler beziehen sich auf das DOM-element, dessenonclick
- Attribut es sich handelt (in diesem Fall die<a>
- element), in der Erwägung, dassthis
imhref
Attribut verweisen auf diewindow
Objekt.In Bezug auf Präsentation, wenn ein
href
Attribut abwesend ist, einen link (z.B.<a onclick="[...]">
) und dann in der Standardeinstellung Browser zeigen dietext
cursor (und nicht die oft gewünschtepointer
cursor), da Sie die Behandlung der<a>
wie ein Anker, und nicht einen link.In Bezug auf Verhalten, bei der Angabe einer Aktion, die von der navigation über
href
der browser unterstützen in der Regel die Eröffnung, dasshref
in einem separaten Fenster, indem Sie entweder einen shortcut oder Kontextmenü. Dies ist nicht möglich bei der Angabe einer Aktion nur überonclick
.Jedoch, wenn Sie sich Fragen, was ist der beste Weg, um dynamische Aktion aus klicken Sie auf ein DOM-Objekt, dann das anbringen einer Veranstaltung mit javascript, trennen von Inhalt des Dokuments ist der beste Weg zu gehen. Sie könnten dies in einer Reihe von Möglichkeiten. Eine gängige Möglichkeit ist die Verwendung einer javascript-Bibliothek wie jQuery zu binden, ein Ereignis:
InformationsquelleAutor der Antwort Adam
Benutze ich
Einen langen Weg um, aber es bekommt den job getan. verwenden Sie Ein a-Stil zu vereinfachen
dann wird es:
InformationsquelleAutor der Antwort Clif Collins
Zusätzlich zu allen hier, die href angezeigt auf der Statusleiste des Browsers, und onclick nicht. Ich denke, es ist nicht benutzerfreundlich, zu zeigen javascript-code.
InformationsquelleAutor der Antwort Kamarey
der beste Weg, dies zu tun ist mit:
Das problem ist, dass das hinzufügen einer Raute (#) an das Ende der URL der Seite im browser, so dass der Benutzer klicken Sie auf die zurück-Taste zweimal um zur Seite zu gehen, bevor Ihr. Angesichts dieser Tatsache müssen Sie code hinzufügen, um die zu stoppen event-propagation. Die meisten javascript-toolkits bereits eine Funktion dafür. Zum Beispiel, das dojo toolkit verwendet
tun.
InformationsquelleAutor der Antwort linusthe3rd
es funktionierte für mich mit dieser Zeile code:
InformationsquelleAutor der Antwort Omar Yassin Carcelen
Dass
javascript:
in jedem Attribut, das nicht explizit für scripting ist eine veraltete Methode von HTML. Während es technisch funktioniert, sind Sie immer noch zuweisen javascript Eigenschaften an einen non-script-Attribut, das ist nicht gute Praxis. Es kann auch nicht auf alten Browsern, oder sogar einige modernere (googeln forum posten seemd zu zeigen, dass Oper nicht wie 'javascript:' - urls).Eine bessere Praxis wäre der zweite Weg, um Ihren javascript-Code in die
onclick
Attribut wird ignoriert, wenn keine scripting-Funktion zur Verfügung. Platzieren Sie eine gültige URL in das href-Feld (üblicherweise '#') für fallback für diejenigen, die nicht über javascript.InformationsquelleAutor der Antwort zombat
Persönlich finde ich, dass putting ruft javascript im HREF-tag nervig. Meist habe ich nicht wirklich achten, ob oder ob nicht etwas ist ein javascript-link oder nicht, und oft öffnen möchten, die Dinge in einem neuen Fenster. Wenn ich versuche, dies zu tun mit einer dieser Arten von links, erhalte ich eine leere Seite mit nichts drauf und javascript in meinem Ort bar. Dies ist jedoch umgangen ein bit mit einem onlick.
InformationsquelleAutor der Antwort Peter
Eine weitere Sache, die ich bemerkt, wenn Sie mit "href" javascript:
Das Skript im "href" - Attribut wird nicht ausgeführt, wenn die Zeit-Differenz zwischen 2 Klicks war Recht kurz.
Versuchen Sie zum Beispiel, führen Sie folgenden Beispiel-und klicken Sie doppelt (schnell!) auf jeden link.
Der erste link wird nur einmal ausgeführt.
Der zweite link wird zweimal ausgeführt.
Reproduziert in Chrom (Doppelklick) und IE11 (mit dreifach-Klick).
In Chrom, wenn Sie auf schnell genug Sie können 10 Klicks und nur 1 Ausführung der Funktion.
Firefox funktioniert ok.
InformationsquelleAutor der Antwort kolobok
Die top-Antwort ist eine sehr schlechte Praxis, man sollte nie den link zu einem leeren hash, wie es kann zu Problemen führen, die Straße hinunter.
Besten binden Sie einen event-handler an das element, wie zahlreiche andere Personen haben angegeben, jedoch
<a href="javascript:doStuff();">do stuff</a>
perfekt funktioniert in jedem modernen browser, und ich benutze Sie ausgiebig, wenn das Rendern von templates zu vermeiden, zu binden, die für jede Instanz. In manchen Fällen kann dieser Ansatz bietet eine bessere Leistung. YMMVAnderen interessanten tid-bit....
onclick
&href
unterschiedliches Verhalten beim aufrufen von javascript direkt.onclick
passierenthis
Kontext korrekt, in der Erwägung, dasshref
nicht, oder in anderen Worten<a href="javascript:doStuff(this)">no context</a>
wird nicht funktionieren, in der Erwägung, dass<a onclick="javascript:doStuff(this)">no context</a>
wird.Ja, ich ließ das
href
. Während der Folge nicht die Skillung, es funktioniert in allen Browsern, obwohl im Idealfall sollte es einehref="javascript:void(0);"
für eine gute MaßnahmeInformationsquelleAutor der Antwort Eduardo
Dies funktioniert
InformationsquelleAutor der Antwort TitusMix
InformationsquelleAutor der Antwort Andrew