2016-04-12 3 views
0

Ich habe mehrere Antworten hier gesehen, die erklären, dass e.preventDefault() und return false einen Link vom Brennen verhindern können, aber es funktioniert nicht für mich. Hier ist mein Code erforderlich, um zu replizieren.e.preventDefault() und return false verhindern nicht, dass der Link ausgelöst wird

HTML

<div id="content"> 
<p class="foo">Paragraph</p> 
<hr> 
<a href="google.com" class="link">Link</a> 
</div> 

JS

document.addEventListener("DOMContentLoaded", function (event) { 
    var page_content_links = document.querySelectorAll('#content a'); 
    for (var i = 0; i < page_content_links.length; i++) { 
     page_content_links[i].addEventListener('click', function (event) { 
       console.log('here'); 
      event.preventDefault(); 
      return false; 
     }); 
    } 
}); 

ist hier ein jsfiddle des Problem demonstriert.

https://jsfiddle.net/beLn9146/4/

Das Verhalten, das ich will, ist, dass, wenn der Link angeklickt wird, wird der Browser nicht folgen und bleibt auf der gleichen Seite. Der Grund ist offensichtlicher, wenn der vollständige Code angezeigt wird, das Problem jedoch oben repliziert wird.

Um Fehler zu beheben, fügte ich ein Konsolenprotokoll hinzu, um sicherzustellen, dass es e.preventDefault() und return false traf, und es ist. Ich habe auch die beiden Methoden isoliert ausprobiert. Ich verwende Chrome aktuell.

Wie kann ich verhindern, dass eine Verbindung ausgelöst wird, und warum gibt mein Code dieses Verhalten nicht?

** Update: ** Aktualisierter Code und JS-Geige stimmen mit der Ereignisvariable überein, und das Problem besteht weiterhin.

+5

'e' in Ihrem Code zu dem Ereignisobjekt bezieht sich nicht! – undefined

+1

@Vohuman In diesem Fall sollte 'return false;' die Umleitung stoppen. – Tushar

+2

Nein, der Fehler (ein ReferenceError) stoppt die Ausführung der folgenden Zeilen. – undefined

Antwort

2

Sie haben das Ereignisobjekt, das das erste Argument für die Ereignishandlerfunktion ist, nicht erfasst.

'click', function() { 

So e ist nicht definiert:

e.preventDefault(); 

und wenn Sie versuchen, dass als eine Funktion aufzurufen, wirft es eine Ausnahme (weil es nicht ist).

So erreicht er nie die Zeile:

return false; 

Sie müssen das Argument nennen:

'click', function (e) { 
+0

Ok hier erreicht es das' return false' https://jsfiddle.net/beLn9146/2/ Warum wird die Seite immer noch aktualisiert? –

+2

Wenn Sie die jsfiddle überprüfen, wird der 'DOMContentLoaded' -Handler weder zum Click-Handler noch nie gesetzt. – GillesC

+0

Dies funktioniert nicht, wird Frage und JS Geige als Beweis aktualisieren. – Goose

Verwandte Themen