Wie verhindert manDefault auf Anchor-Tags?
Sagen wir, ich habe einen Anker-tag wie
<a href="#" ng-click="do()">Click</a>
Wie kann ich verhindern, dass der browser von Navigation # in AngularJS ?
InformationsquelleAutor der Frage Micael | 2012-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: ich hab da meine Meinung geändert, auf diese Lösung. Nach mehr Entwicklung und die verbrachte Zeit der Arbeit an diesem, ich glaube, eine bessere Lösung zu diesem problem ist Folgendes zu tun:
Und dann aktualisieren Sie Ihre
css
haben eine zusätzliche Regel:Seine viel einfacher und bietet die gleiche Funktionalität und ist viel effizienter. Hoffe, die hilfreich sein könnten, um jemand anderes suchen, bis diese Lösung in der Zukunft.
Das folgende ist meine bisherige Lösung, auf die ich mich verlassen hier, nur für legacy-Zwecke:
Wenn Sie dieses problem sehr, eine einfache Richtlinie, die würde dieses Problem beheben, ist die folgende:
Er prüft alle Anker-tags (
<a></a>
), um zu sehen, wenn Ihrehref
Attribut ist entweder eine leere Zeichenfolge (""
) oder einer Raute ('#'
) oder es ist einng-click
Zuordnung. Wenn es feststellt, dass eine dieser Bedingungen, es fängt das event an und verhindert das Standardverhalten.Der einzige Nachteil ist, dass es diese Richtlinie für alle Anker-tags. Also, wenn Sie haben eine Menge von Anker-tags auf der Seite und Sie nur wollen, um zu verhindern, dass das default-Verhalten für eine kleine Zahl von Ihnen, dann ist diese Richtlinie ist nicht sehr effizient. Aber ich will fast immer zu
preventDefault
so dass ich mit dieser Richtlinie alle in meinem AngularJS apps.InformationsquelleAutor der Antwort tennisgent
Entsprechend der docs für ngHref Sie sollten in der Lage zu verlassen aus der href oder tun href="".
InformationsquelleAutor der Antwort Chris
Übergeben Sie den $event-Objekt der Methode, und rufen Sie
$event.preventDefault()
auf, so dass die Standard-Verarbeitung nicht auftreten:InformationsquelleAutor der Antwort mna
Bevorzuge ich Richtlinien für diese Art der Sache. Hier ist ein Beispiel
Sowie die Richtlinie code für
eat-click
:Nun können Sie die
eat-click
- Attribut auf jedes element, und es wirdpreventDefault()
'ed automagisch.Vorteile:
$event
Objekt indo()
Funktion.$event
ObjektInformationsquelleAutor der Antwort djsmith
Obwohl Renaud gab eine große Lösung
Ich persönlich fand Sie auch brauchen, $event.stopPropagation() in einigen Fällen zu vermeiden, einige der Nebenwirkungen
wird meine Lösung
InformationsquelleAutor der Antwort zainengineer
InformationsquelleAutor der Antwort The Whiz of Oz
Die einfachste Lösung, die ich gefunden habe, ist diese :
InformationsquelleAutor der Antwort Clément Renaud
Also das Lesen durch diese Antworten, @Chris hat immer noch die meisten "richtigen" Antwort, nehme ich an, aber Sie hat ein problem, es zeigt nicht den "Zeiger"....
So, hier sind zwei Möglichkeiten, um dieses problem zu lösen, ohne dass fügen Sie eine cursor:pointer Stil:
Verwenden
javascript:void(0)
statt#
:Verwenden
$event.preventDefault()
imng-click
Richtlinie (damit Sie nicht junk-bis Sie Ihren controller mit DOM-zugehörige Referenzen):Ich persönlich bevorzuge die erstere über die letztere.
javascript:void(0)
hat andere Vorteile, die sind diskutiert hier. Es ist auch Diskussion von "unobtrusive JavaScript" in diesem link, ist erschreckend aktuell und nicht unbedingt direkt bei einem Winkel Anwendung.InformationsquelleAutor der Antwort Ben Lesh
Können Sie das wie folgt tun
1.Entfernen
href
Attribut von Anker(a
) tag2.Setze pointer cursor in css ng klicken Sie auf Elemente
InformationsquelleAutor der Antwort Fizer Khan
HTML
hier rein angularjs: in der Nähe von ng-click-Funktion können Sie schreiben, die preventDefault () - Funktion durch Semikolon trennen
JS
(oder)
können Sie auf diese Weise Vorgehen, ist dies bereits diskutiert einige hier.
HTML
JS
InformationsquelleAutor der Antwort vallepu veerendra kumar
Da Sie eine web-app, warum brauchst du links?
Tauschen Ihre Anker zu Tasten!
InformationsquelleAutor der Antwort sidonaldson
falls noch relevant:
InformationsquelleAutor der Antwort xac
Versuchen, diese option, die ich sehen kann, ist noch nicht oben aufgeführt :
InformationsquelleAutor der Antwort pollux1er
Ich würde gehen mit:
Ganzen dies zu verhindern Standard-Sache wurde verwirrend für mich, so habe ich eine JSFiddle
es veranschaulicht, Wann und wo Winkel verhindert, dass Standard -.
Dem JSFiddle ist mit Angular ist eine Richtlinie - so sollte es sein, GENAU das gleiche. Sehen Sie den source-code hier: ein tag source code
Ich hoffe das hilft weiter-Klärung für einige.
Hätte ich gerne post-doc zu ngHref aber ich kann nicht wegen meinem Ruf.
InformationsquelleAutor der Antwort martinmose
Dies ist, was ich immer tun. Funktioniert wie ein Charme!
InformationsquelleAutor der Antwort Catfish
Benötigen oder wenn Sie inline, können Sie dies tun:
InformationsquelleAutor der Antwort ntekka
Ist der sicherste Weg, um zu vermeiden, von Ereignissen auf ein "href" wäre zu definieren als
InformationsquelleAutor der Antwort Michael Drob
Viele Antworten scheinen zu viel des guten. BEI MIR klappt das
InformationsquelleAutor der Antwort Tom Stickel
Ich brauche eine Anwesenheit von href-Attribut der Wert für den Abbau (wenn js ausgeschaltet ist), so kann ich nicht mit leeren href-Attribut (oder "#"), aber der code oben hat bei mir nicht funktioniert, denn ich brauche ein Ereignis (e) - variable. Ich habe meine eigene Richtlinie:
In HTML:
InformationsquelleAutor der Antwort focused
Kreditaufnahme von tennisgent Antwort. Ich mag, dass Sie nicht zum erstellen einer benutzerdefinierten Richtlinie auf hinzufügen, auf allen links. Aber ich couldnt seine arbeiten in IE8. Hier ist, was schließlich für mich gearbeitet (mit eckigen 1.0.6).
Feststellen, dass "binden" können Sie verwenden, jqLite zur Verfügung gestellt von Winkel-so dass keine Notwendigkeit, wrap mit voller jQuery. Auch die stopPropogation Methode.
InformationsquelleAutor der Antwort Lukus
Ich lief in das gleiche Problem bei der Verwendung von Dübeln für eine angular bootstrap-Dropdown. Die einzige Lösung, die ich gefunden, die vermieden, unerwünschte Nebenwirkungen (dh. das drop-down nicht schließen, weil der Verwendung von " preventDefault ()") wurde um die folgenden:
InformationsquelleAutor der Antwort cjackson
wenn Sie nie wollen, gehen Sie zu "href" ... sollten Sie Ihre markup und verwenden Sie eine Taste, nicht ein Anker-tag ein, denn semantisch ist es nicht ein Anker oder link. Umgekehrt, wenn Sie haben eine Taste, macht ein paar Prüfungen, und dann leitet es sollte eine link - /anchor-tag und nicht eine Taste... für SEO-Zwecke als auch Test [insert test-suite hier].
für die links, die Sie nur wollen, um die Umleitung bedingt, wie aufgefordert, die änderungen zu speichern, oder erkennen schmutzigen Zustand... Sie verwenden sollten, ng-click="someFunction($event)" und in someFunction auf Ihre validationError preventDefault und oder stopPropagation.
auch nur weil Sie können bedeutet nicht, sollten Sie. javascript:void(0) arbeitete auch wieder in den Tag... aber wegen der ruchlosen Hacker/Cracker Browser-flag-apps/Webseiten, die javascript verwenden, innerhalb eines href... sehe keinen Grund zu ducktype oben..
im Jahr 2016 seit 2010 sollte kein Grund sein, überall zu verwenden links, die wirken wie buttons... wenn Sie noch Unterstützung IE8 und unten, die Sie brauchen, um neu zu bewerten Ihrem Unternehmen.
InformationsquelleAutor der Antwort PDA
InformationsquelleAutor der Antwort
Was Sie tun sollten, ist das weglassen der
href
Attribut völlig.Wenn man sich die Quellcode für die
a
element-Direktive (das ist ein Teil des Winkel-core), heißt es in Zeile 29 - 31:Was bedeutet, Winkel bereits an der Lösung des Problems von links ohne href. Die einzige Frage, die Sie noch haben, ist das css-problem. Sie können das Zeiger-Stil-Anker, ng-Klicks, z.B.:
So, man könnte sogar machen Sie Ihre Website zugänglich Kennzeichnung echte links mit einem feinen, verschiedenen styling dann links, die Funktionen durchzuführen.
Happy coding!
InformationsquelleAutor der Antwort Justus Romijn
Eine alternative könnte sein:
InformationsquelleAutor der Antwort Terence Bandoian