jQuery Klicken Sie auf Ereignis PreventDefault

7

Wenn ich ein a -Tag habe:

%Vor%

Und etwas Javascript, das zur Bestätigung des Löschens auffordert:

%Vor%

Ich dachte, e.preventDefault() würde das a href daran hindern zu feuern, aber es ist nicht so. Wenn ich auf das a-Tag klicke, geht es einfach zur URL, ohne das Javascript auszuführen. Wie kann ich das schaffen?

Danke.

    
Justin 08.07.2012, 00:34
quelle

5 Antworten

15

Dieser Code funktioniert:

Du kannst nicht einfach return true ausführen und erwarten, dass der Link ausgelöst wird, nachdem du e.preventDefault() erledigt hast. Ich musste Ihre bootbox.confirm() durch eine JS-Bestätigung ersetzen, aber es sollte immer noch funktionieren.

%Vor%

DEMO

Versuchen Sie, Ihren Codeblock durch den oben angegebenen Code zu ersetzen. Wenn das funktioniert, setze deine bootbox -Bestätigung zurück und versuche es erneut. Das wird dir sagen, wo der Fehler ist.

    
sachleen 08.07.2012, 00:44
quelle
6

Es ist besser, es nur bei Bedarf zu verhindern. Wenn der Benutzer z. B. "Abbrechen" aus dem Bestätigungsfeld ausgewählt hat, dann verhindern Sie die Standardeinstellung.

%Vor%

Demo: Ссылка

Normalerweise, wenn Sie eine Bestätigung benötigen, ist dies der beste Weg, um dies zu erreichen, und das Ereignis ist für Bestätigungen vor dem Absenden von Formularen hilfreicher.

Ich bin mir nicht sicher, ob bootbox das Verhalten von Browsern repliziert, wenn Sie um Bestätigung bitten. In diesem Szenario funktioniert es möglicherweise nicht. Wenn das der Fall ist, ist es besser, irgendwo eine Flagge zu setzen.

%Vor%

Irgendwie mag ich die Methode window.location nicht, weil sie dazu führen kann, dass andere mit diesem Element verbundene Ereignisse fehlschlagen.

    
SMathew 08.07.2012 01:27
quelle
2

Ich habe dieses Problem auch getroffen.

Sie können window.location verwenden, damit der Browser eine neue Seite besucht, aber die aktuelle Seite wird nicht im Browserverlauf aufgezeichnet (zumindest nicht mit Google Chrome).

Also stimme ich SMathew zu, dass das neue Ereignis ausgelöst werden sollte. Aus Sicherheitsgründen führt das Klickereignis für Anker, die von jQuery ausgelöst werden, nicht dazu, dass der Browser eine neue Seite aufruft. Endlich fand ich den folgenden Code.

%Vor%

Ich habe nur den obigen Code in Google Chrome getestet, und ich habe den Fire Event-Code von Ссылка

MEHR

Ich habe diesen Beitrag Ссылка und jQuery.simulate kann verwendet werden, um dieses Problem zu lösen. Mein endgültiger Code sieht so aus:

%Vor%

Es funktioniert auf Anker und Form-Schaltflächen.

    
lonecat 14.09.2013 18:35
quelle
0

Sie müssen return false; für Anchor-Tags angeben.

Siehe dieses jsFiddle .

    
Dean Brundage 08.07.2012 00:36
quelle
0

Probieren Sie diesen Code:

%Vor%     
Navdeep 21.11.2015 07:57
quelle

Tags und Links