Mam trochę HTML i jQuery, które przesuwają się w div
górę iw dół, aby pokazać lub ukryć to po kliknięciu linku:
<ul class="product-info">
<li>
<a href="#">YOU CLICK THIS TO SHOW/HIDE</a>
<div class="toggle">
<p>CONTENT TO SHOW/HIDE</p>
</div>
</li>
</ul>
$('div.toggle').hide();
$('ul.product-info li a').click(function(event){
$(this).next('div').slideToggle(200);
}
Moje pytanie brzmi: jak preventDefault()
zatrzymać działanie łącza jako łącza i dodać znak „#” na końcu mojego adresu URL i przeskoczyć na górę strony?
Nie mogę znaleźć właściwej składni, po prostu pojawia się komunikat o błędzie
PreventDefault () nie jest funkcją.
javascript
jquery
Chris J Allen
źródło
źródło
href
Atrybut @KLVTZ tagu kotwicy (a
) może nie być pusty ... Ale możemy go ustawić najavascript:<code-here>
, to jest legalne / ważne. Następnie wprowadzamy<code-here>
tylko pustą instrukcję, dodając średnik. W ten sposób link nic nie robi.Sugeruje się, aby nie używać
return false
, ponieważ w rezultacie występują 3 rzeczy:Więc w tego typu sytuacjach powinieneś używać tylko
event.preventDefault();
Archiwum artykułu - jQuery Events: Stop (Mis) Using Return False
źródło
Alternatywnie możesz po prostu zwrócić wartość false ze zdarzenia kliknięcia:
$('div.toggle').hide(); $('ul.product-info li a').click(function(event){ $(this).next('div').slideToggle(200); + return false; });
Co powstrzymałoby uruchomienie A-Href.
Uwaga jednak ze względów użyteczności w idealnym świecie ten href powinien gdzieś iść, dla osób, które chcą otworzyć link w nowej zakładce;)
źródło
To jest rozwiązanie inne niż JQuery, które właśnie przetestowałem i działa.
<html lang="en"> <head> <script type="text/javascript"> addEventListener("load",function(){ var links= document.getElementsByTagName("a"); for (var i=0;i<links.length;i++){ links[i].addEventListener("click",function(e){ alert("NOPE!, I won't take you there haha"); //prevent event action e.preventDefault(); }) } }); </script> </head> <body> <div> <ul> <li><a href="http://www.google.com">Google</a></li> <li><a href="http://www.facebook.com">Facebook</a></li> <p id="p1">Paragraph</p> </ul> </div> <p>By Jefrey Bulla</p> </body> </html>
źródło
<ul class="product-info"> <li> <a href="javascript:void(0);">YOU CLICK THIS TO SHOW/HIDE</a> <div class="toggle"> <p>CONTENT TO SHOW/HIDE</p> </div> </li> </ul>
Posługiwać się
źródło
href="javascript:// Send Email"
Jeszcze inny sposób to zrobić w JavaScript za pomocą
inline onclick
,IIFE
,event
ipreventDefault()
:<a href='#' onclick="(function(e){e.preventDefault();})(event)">Click Me</a>
źródło
<a href='#' onclick="event.preventDefault()">Click Me</a>
po kilku operacjach, gdy strona powinna wreszcie przejść do linku, możesz wykonać następujące czynności:
jQuery("a").click(function(e){ var self = jQuery(this); var href = self.attr('href'); e.preventDefault(); // needed operations window.location = href; });
źródło
preventDefault
, a następnie samodzielnie wykonać domyślne działanie? Po prostu zrób to, co musisz dodać, i pozwól, aby ustawienie domyślne nadal miało miejsce.Dlaczego nie zrobić tego po prostu w CSS?
Usuń atrybut „href” z tagu kotwicy
<ul class="product-info"> <li> <a>YOU CLICK THIS TO SHOW/HIDE</a> <div class="toggle"> <p>CONTENT TO SHOW/HIDE</p> </div> </li> </ul>
W twoim css,
a{ cursor: pointer; }
źródło
Jeśli zatrzymanie propagacji zdarzenia Ci nie przeszkadza, po prostu użyj
return false;
na końcu twojego handlera. W jQuery zapobiega domyślnemu zachowaniu i zatrzymuje propagowanie zdarzeń.
źródło
Możesz skorzystać
return false;
z wywołania zdarzenia, aby zatrzymać propagację zdarzenia, działa to jak jegoevent.preventDefault();
negacja. Lub możesz użyćjavascript:void(0)
atrybutu href, aby ocenić dane wyrażenie, a następnie zwrócićundefined
do elementu.Zwracanie wydarzenia, gdy zostanie wywołane:
<a href="" onclick="return false;"> ... </a>
Pusta sprawa:
<a href="javascript:void(0);"> ... </a>
Więcej informacji na ten temat można znaleźć w artykule: Jaki jest efekt dodania void (0) dla href i „return false” w detektorze zdarzenia kliknięcia tagu kotwicy?
źródło