2009-01-29 10 views
61

Pracuję nad JQuery, aby ukryć/pokazać niektóre treści po kliknięciu łącza. Mogę stworzyć coś takiego:Jak mogę utworzyć pustą kotwicę HTML, aby strona nie "podskoczyła" po jej kliknięciu?

<a href="#" onclick="jquery_stuff" /> 

Ale jeśli kliknę, że link, a ja jestem przewijane w dół na stronie, będzie to skok z powrotem do górnej części strony.

Jeśli robię coś takiego:

<a href="" onclick="jquery_stuff" /> 

Strona będzie przeładować, który pozbywa stronę wszystkich zmian, dokonanych JavaScript.

coś takiego:

<a onclick="jquery_stuff" /> 

da mi pożądany efekt, ale to już nie pokazuje się jako link. Czy jest jakiś sposób określenia pustej kotwicy, aby móc przypisać obsługę javascript do zdarzenia onclick, bez zmiany czegokolwiek na stronie lub przesuwania paska przewijania?

+24

Przestań umieszczać programy obsługi zdarzeń w kodzie HTML i przestań używać znaczników zakotwiczenia, które nie służą do celów semantycznych kotwicy. Użyj przycisku i dodaj obsługę kliknięć w swoim Javascript. Przykład: HTML '' i JavaScript '$ ('# jquery_stuff'). Click (jquery_stuff);'. Możesz użyć CSS, aby styl przycisku wyglądał jak link, poprzez usunięcie dopełnienia, obramowań, marginesu i koloru tła, a następnie dodanie stylów linków (np. Kolor i dekoracja tekstu). – eyelidlessness

+4

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ – albertjan

Odpowiedz

79

Wpisz "return false;" na drugiej opcji:

<a href="" onclick="jquery_stuff; return false;" /> 
+0

Perfect, thanks :) –

+1

Całkowicie niepotrzebne. Po prostu zrób href = "javascript: code stuff". Nigdy nigdzie nie skacze. –

+11

"return false;" to właściwy sposób. Adres javascript: URL może nadal zastępować stronę, jeśli zwraca obiekt inny niż NULL, i daje brzydki błąd JavaScript w funkcjach takich jak otwarta-nowa-karta. – bobince

0
<a href="javascript:// some helpful comment " onclick="jquery_stuff" /> 
+0

Wow, wygląda gorąco! Czy działa w starym IE? – Savageman

24

Trzeba return false; po jquery_stuff:

<a href="no-javascript.html" onclick="jquery_stuff(); return false;" /> 

ten anuluje domyślne działanie.

+4

Podoba mi się pomysł dostarczenia celu dla użytkowników innych niż javascript. Byłoby szczególnie przydatne, gdyby strona docelowa robiła coś podobnego do tego, co robiłby javascript ... – rmeador

+3

W zależności od tego, co robi JS, jest to uważane za najbardziej dostępne dla użytkowników nie korzystających z JS. +1 – cdeszaq

+5

-tag nie jest pusty -> is wrong. – filou

4
<a href="javascript:;" onclick="jquery">link</a> 

href wymaga czegoś tam, jeśli chcesz to nie pojawiają się błędy w walidatorami HTML. javascript:; to dobry uchwyt na miejsce.

Jeśli naprawdę chcesz używać #:

<a href="#me" name="me" onclick="jquery">link</a> 

Bądź ostrożny z return false;, to zatrzymuje domyślnych zachowań cokolwiek robisz.

Również jeśli twój js jest jak przesyłanie, możesz napotkać problemy w eksploratorze internetowym.

23

można umieścić po prostu jak poniżej:

<a href="javascript:;" onclick="jquery_stuff"> 
+2

this one is much simpler then others –

-1

Zwykle używam <span> i styl to wygladac linkiem kiedy trzeba dokonać czegoś takiego.

+4

I'm quite sure this makes the web site inaccessible with a keyboard, because the onclick will not fire when you press Enter, even though you have made the span selectable by adding a tabindex to it. This is important to test, if you are developing a public web site that needs to follow the WCAG guidelines. –

+1

While this is true you're also creating something that isn't strictly a link in HTML sense. So it shouldn't always be treated as one. – Eirinn

-2

Zazwyczaj robię: Komentarz

<a style="cursor:pointer;" onclick="whatever();">Whatever</a> 
+0

I'm pretty sure that won't validate.. – UpTheCreek

+1

It will, but it won't be a link, won't be styled as a link, and won't be keyboard accessible. – Quentin

6

Check eyelidlessness' (użyj przycisku, a nie anchor). Właśnie chciałem opublikować tę samą radę. Zakotwiczenie, które nie łączy się z zasobem i wykonuje tylko skrypt, powinno być zaimplementowane jako przycisk.

Zatrzymaj oddanie obsługi zdarzeń w HTML, i przestać używać znaczników zakotwiczenia które nie służą celom zakotwiczyć semantyczne. Użyj przycisku i dodaj obsługę obsługi kliknięć w swoim kodzie JavaScript.Przykład: HTML <button id="jquery_stuff">Label</button> i JavaScript $('#jquery_stuff').click(jquery_stuff);. Możesz użyć CSS do stylu przycisku , aby wyglądał jak link, usuwając wypełnienie, brzegi, margines i kolor tła, a następnie dodając style linków (np. Kolor i tekst dekoracji). - eyelidlessness 19 października '10 na 17:40

-4

Jak o tym:

<a href="#nogo" onclick="foo();">some text</a> 
19

jQuery posiada funkcję wbudowaną do tego o nazwie preventDefault które można znaleźć tutaj: http://api.jquery.com/event.preventDefault/

Oto ich przykład:

<script> 
$("a").click(function(event) { 
    event.preventDefault(); 
}); 
</script> 

Można również zbudować li nk tak:

<a href="javascript:void(0)" onclick="myJsFunc();">Link</a> 
+1

link Jest to jedyny naprawdę prawidłowy i ogólny sposób, w jaki działa niezależnie od używania jQuery lub czegokolwiek innego (w części onclick). – cseelus

-1
<a href="#" class="falseLinks">Link1</a> 
    <a href="#" class="falseLinks">Link2</a> 

etc ..

JQUERY:

$(function() { 
    $("a.falseLinks").click(function() { 
     // ...other stuff you want to do when links is clicked 

     // This is the same as putting onclick="return false;" in HTML 
    return false; 
    }) 
    }); 

@eyelidlessness był Douchy nieco na drodze, ale on powiedział, że miał rację. To najczystszy sposób na zrobienie tego. Dlaczego warto korzystać z jQuery, jeśli wrócisz do Javascriptu wanilii w poszukiwaniu rzeczy, które jQuery robi łatwiej i czystsze?

Powiązane problemy