<a href="javascript:void(0)" id="loginlink">login</a>
Widziałem href
wiele razy, ale nie wiem, co to dokładnie znaczy.
javascript
void
o mój Boże
źródło
źródło
javascript:
jest jednym z wielu schematów URI: en.wikipedia.org/wiki/URI_scheme , jakdata:
.href="javascript:"
do tego samego celu. Jak stwierdzono w odpowiedzi na to pytanie ,void(0)
część pierwotnie była przeznaczona dla wczesnych wersji przeglądarek, w którychjavascript:
obsługa URI była inna. Ale teraz nie mogłem nawet znaleźć wersji, w której skrót nie działałby, przynajmniej IE7 obsługuje to poprawnie.Odpowiedzi:
Wyjaśnienie znajduje się tutaj:
void
operator .Powodem, dla którego chcesz to zrobić za
href
pomocą linku, jest to, że normalniejavascript:
adres URL przekieruje przeglądarkę do wersji tekstowej wyniku oceny tego JavaScript. Ale jeśli wynik jest takiundefined
, przeglądarka pozostaje na tej samej stronie.void(0)
to tylko krótki i prosty skrypt, który oceniaundefined
.źródło
Oprócz odpowiedzi technicznej
javascript:void
oznacza to, że autor robi to źle.Nie ma dobrego powodu, aby używać
javascript:
pseudo-URL (*). W praktyce spowoduje zamieszanie lub błędy, jeśli ktoś spróbuje czegoś takiego jak „link do zakładki”, „otwórz link w nowej karcie” i tak dalej. Zdarza się to dość często, gdy ludzie przyzwyczaili się już do klikania środkowym kliknięciem nowej karty: wygląda jak link, chcesz przeczytać go w nowej karcie, ale okazuje się, że nie jest to prawdziwy link, i daje niechciane wyniki, takie jak pusta strona lub błąd JS po kliknięciu środkowym przyciskiem.<a href="#">
jest powszechną alternatywą, która może być mniej zła. Należy jednak pamiętać o tym, abyreturn false
ze stronyonclick
obsługi zdarzeń nie dopuścić do podążenia za linkiem i przewinięcia w górę strony.W niektórych przypadkach może istnieć przydatne miejsce do wskazania linku. Na przykład, jeśli masz kontrolkę, którą możesz kliknąć, która otwiera poprzednio ukrytą
<div id="foo">
, sensowne jest użycie<a href="#foo">
linku do niej. Lub jeśli istnieje sposób wykonania tej samej czynności w języku innym niż JavaScript (na przykład „thispage.php? Show = foo”, który ustawia foo na początku), możesz utworzyć link do tego.W przeciwnym razie, jeśli link wskazuje tylko na jakiś skrypt, tak naprawdę nie jest to link i nie powinien być oznaczony jako taki. Zazwyczaj podejście byłoby dodać
onclick
do<span>
,<div>
, albo<a>
bez przeprowadzeniahref
i projektować je w jakiś sposób, aby go wyczyścić można kliknąć na nim. To właśnie StackOverflow [zrobił w momencie pisania; teraz używahref="#"
].Wadą tego jest to, że tracisz kontrolę nad klawiaturą, ponieważ nie możesz tabulować na span / div / bare-a lub aktywować go spacją. To, czy faktycznie jest to wada, zależy od tego, jakie działanie ma podjąć dany element. Możesz z pewnym wysiłkiem naśladować interaktywność klawiatury, dodając element
tabIndex
do elementu i nasłuchując naciśnięcia klawisza Space. Ale nigdy nie będzie w 100% odtwarzać prawdziwego zachowania przeglądarki, zwłaszcza dlatego, że różne przeglądarki mogą różnie reagować na klawiaturę (nie wspominając o przeglądarkach niewizualnych).Jeśli naprawdę chcesz elementu, który nie jest łączem, ale który można normalnie aktywować za pomocą myszy lub klawiatury, to czego potrzebujesz
<button type="button">
(lub<input type="button">
jest równie dobry, jeśli chodzi o proste treści tekstowe). Zawsze możesz użyć CSS, aby zmienić styl, aby wyglądał bardziej jak link niż przycisk, jeśli chcesz. Ale ponieważ zachowuje się jak przycisk, tak naprawdę powinieneś to zaznaczyć.(*: w każdym razie przy tworzeniu witryny. Oczywiście są one przydatne w przypadku bookmarkletów.
javascript:
Pseudo-URL to pojęciowy dziwak: lokalizator, który nie wskazuje na lokalizację, ale zamiast tego wywołuje aktywny kod w bieżącej lokalizacji. problemy zarówno przeglądarek, jak i aplikacji internetowych i nigdy nie powinny być wynalezione przez Netscape.)źródło
href
S w przeglądarce, w tym dziwactw i efektów ubocznych; niektórzy z was mogą uznać to za przydatne: jakub-g.github.com/accessibility/onclickvoid(0)
jest potrzebny w wielu przypadkach; „#” to włamanie, które niesie ze sobą cały szereg problemów (nie działałoby w aplikacji, którą piszę, która doprowadziła mnie do tej strony).preventDefault
zostanie użyty. Nie rób tego w przypadku użycia kotwicy jako przycisku na formularzu.Oznacza to, że nic nie zrobi. Jest to próba, aby łącze nie „nigdzie nawigowało”. Ale to nie jest właściwa droga.
Powinieneś tak po prostu
return false
naonclick
razie, tak:Zazwyczaj używa się go, gdy link robi coś w stylu „JavaScript-y”. Jak publikowanie formularza AJAX, zamiana obrazu lub cokolwiek innego. W takim przypadku wystarczy wykonać dowolną funkcję nazywaną return
false
.Aby jednak Twoja witryna była całkowicie niesamowita, zazwyczaj zawiera link, który wykonuje tę samą czynność, jeśli osoba przeglądająca ją zdecyduje się nie uruchamiać JavaScript.
źródło
<a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">
.Istnieje OGROMNA różnica w zachowaniu „#” vs javascript: void
„#” przewija cię do GÓRY strony, a „javascript: void (0);” nie.
Jest to bardzo ważne, jeśli kodujesz strony dynamiczne. użytkownik nie chce wrócić do góry tylko dlatego, że kliknął link na stronie.
źródło
false
do modułu obsługi zdarzeń:onclick="doSomething();return false;"
lub, jeślidoSomething()
zwracafalse
, możesz użyćonclick="return doSomething();"
.e.preventDefault()
."#"
nie jest ona przewijana do góry po zwróceniu wartości false.Jest to bardzo popularna metoda dodawania funkcji JavaScript do linków HTML.
Na przykład:
[Print]
linki widoczne na wielu stronach internetowych są napisane w następujący sposób:Dlaczego potrzebujemy
href
, abyonclick
samemu wykonać pracę? Ponieważ gdy użytkownikhref
umieści wskaźnik myszy nad tekstem „Drukuj”, gdy nie ma , kursor zmieni się w kursor (ꕯ) zamiast wskaźnika (👆). Tylko mająchref
naa
tagu sprawdza go jako hiperłącze.Alternatywą dla
href="javascript:void(0);"
jest użyciehref="#"
. Ta alternatywa nie wymaga włączonego JavaScript w przeglądarce użytkownika, więc jest bardziej kompatybilna.źródło
href
kursora wskazującego; wystarczy trochę CSS.<a href="javascript:callPrintFunction()">
jest czystszy (chociaż prawdopodobnie powinien to byćbutton
raczeja
nchor, jeśli tak naprawdę nigdzie cię nie zabierze).href="#"
może prowadzić do nieprzyjemnych niespodzianek - takich jak przerwane żądania xhr, które są wywoływane po kliknięciu tego linku. Niedawno miałem trudności z debugowaniem strony internetowej, która przerwała żądanie logowania OIDC, jeśli użytkownik znalazł się pod adresem, który nie był głównym katalogiem witryny.#
href spowodował, że przeładował adres przed zakończeniem żądania xhr.Należy zawsze mieć na swoim href a tagów. Wywołanie funkcji JavaScript, która zwraca „niezdefiniowane”, wystarczy. Więc będzie link do „#”.
Tagi zakotwiczone w programie Internet Explorer 6 bez hrefa nie otrzymują
a:hover
zastosowanego stylu.Tak, to straszne i drobne przestępstwo przeciwko ludzkości, ale z drugiej strony Internet Explorer 6 w ogóle.
Mam nadzieję, że to pomoże.
Internet Explorer 6 jest w rzeczywistości poważnym przestępstwem przeciwko ludzkości.
źródło
Warto wspomnieć, że czasem podczas sprawdzania niezdefiniowanej wartości zobaczysz pustkę 0, ponieważ wymaga mniej znaków.
Na przykład:
vs.
Z tego powodu niektóre metody minimalizacji zamieniają niezdefiniowane na void 0.
źródło
void 0
. Różnica 3 znaków sumuje się szybko, gdy wiele metod używa domyślnych wartości parametrów.Zastosowanie
javascript:void(0)
oznacza, że autor HTML niewłaściwie używa elementu kotwicy zamiast elementu przycisku.Źródło: MDN w
<a>
Page .źródło
void
to operator używany do zwracaniaundefined
wartości, więc przeglądarka nie będzie mogła załadować nowej strony.Przeglądarki internetowe podejmą próbę pobrania dowolnego adresu URL i załadowania go, chyba że jest to funkcja JavaScript zwracająca wartość null. Na przykład, jeśli klikniemy taki link:
wtedy pojawi się komunikat ostrzegawczy bez ładowania nowej strony, a to dlatego, że
alert
jest to funkcja, która zwraca wartość null. Oznacza to, że gdy przeglądarka próbuje załadować nową stronę, widzi pusty i nie ma nic do załadowania.Ważną rzeczą do zapamiętania na temat operatora void jest to, że wymaga on wartości i nie może być używany samodzielnie. Powinniśmy użyć tego w następujący sposób:
źródło
Aby zrozumieć tę koncepcję, należy najpierw zrozumieć operator pustki w JavaScript.
Składnia operatora void jest następująca:
void «expr»
która ocenia wyrażenie i zwraca niezdefiniowane.Jeśli zaimplementujesz void jako funkcję, wygląda to następująco:
Ten operator pustki ma jedno ważne zastosowanie - odrzucanie wyniku wyrażenia.
W niektórych sytuacjach ważne jest, aby powrócić niezdefiniowany, w przeciwieństwie do wyniku wyrażenia. Następnie można użyć pustki, aby odrzucić ten wynik. Jedna z takich sytuacji dotyczy javascript: adresów URL, których należy unikać w przypadku linków, ale są one przydatne w przypadku bookmarkletów. Podczas odwiedzania jednego z tych adresów URL wiele przeglądarek zastępuje bieżący dokument wynikiem oceny „treści” adresów URL, ale tylko wtedy, gdy wynik nie jest niezdefiniowany. Dlatego jeśli chcesz otworzyć nowe okno bez zmiany aktualnie wyświetlanej zawartości, możesz wykonać następujące czynności:
źródło
function myVoid(expr) { expr(); return undefined; }
Zapomniałeś dodać expr ();expr
jest już oceniany pomyVoid()
wywołaniu ( wynik tego wyrażenia jest przekazywany jako parametr)function() { alert("foo"); }
to poprawne wyrażenie .void(function() { alert("foo"); })
zwracaundefined
i nie pokazuje alertu, podczasmyVoid(function() { alert("foo"); })
gdy (w twojej wersji, nie tej z Gopal Yadav ).void
Operatora ocenia danego wyrażenia, a następnie powraca niezdefiniowane. Unika odświeżania strony.źródło
Programiści używają tego,
javascript:void(0)
ponieważ jest to najprostszy sposób, aby zapobiec domyślnemu zachowaniua
tagu.void(*anything*)
zwracaundefined
wartość falsy. a zwracanie wartości fałszowania jest jakreturn false
wonclick
przypadkua
tagu, który uniemożliwia jego domyślne zachowanie.Myślę więc, że
javascript:void(0)
jest to najprostszy sposób, aby zapobiec domyślnemu zachowaniua
tagu.źródło
Łącze musi mieć określony cel HREF, aby mógł być użytecznym obiektem wyświetlanym.
Większość przeglądarek nie analizuje zaawansowanego kodu JavaScript w pliku
tag taki jak:
ponieważ znacznik HREF w większości przeglądarek nie zezwala na białe znaki lub konwertuje białe znaki na% 20, odpowiednik HEX SPACJI, co sprawia, że JavaScript jest absolutnie bezużyteczny dla interpretera.
Jeśli więc chcesz użyć znacznika HREF do uruchomienia wbudowanego kodu JavaScript, musisz podać prawidłową wartość parametru HREF FIRST, który nie jest zbyt skomplikowany (nie zawiera białych znaków), a następnie podać kod JavaScript w tagu atrybutu zdarzenia, takiego jak OnClick , OnMouseOver, OnMouseOut itp.
Typową odpowiedzią jest zrobienie czegoś takiego:
Działa to dobrze, ale powoduje, że strona przeskakuje na górę, ponieważ nakazuje to znak funta / hash.
Wystarczy podać znak funta / hash w tagu A HREF, tak naprawdę określa kotwicę główną, która zawsze jest domyślnie na górze strony, możesz określić inną lokalizację, określając atrybut NAME w tagu A HREF.
Następnie możesz zmienić tag A HREF, aby przejść do „middleofpage” i wykonać JavaScript w zdarzeniu OnClick, gdy tak się stanie:
Będzie WIELE WCZEŚNIE, gdy nie chcesz, aby ten link przeskakiwał, więc możesz zrobić dwie rzeczy:
Teraz kliknięcie nie zniknie, ale może spowodować, że strona ponownie wyśrodkuje się z bieżącej rzutni. To nie jest ładne. Jaki jest najlepszy sposób na dostarczenie wbudowanego javascript za pomocą A HREF, ale bez konieczności wykonywania powyższych czynności? JavaScript: void (0);
Mówi to przeglądarce, aby przejść NIGDY, ale zamiast tego wykonać prawidłowy JavaScript: void (0); działają najpierw w znaczniku HREF, ponieważ nie zawiera białych znaków i nie będzie analizowany jako adres URL. Zamiast tego zostanie uruchomiony przez kompilator. VOID jest słowem kluczowym, które po dostarczeniu z wartością 0 zwraca wartość UNDEFINED, która nie wykorzystuje już żadnych zasobów do obsługi zwracanej wartości, która wystąpiłaby bez podania wartości 0 (jest bardziej przyjazna dla zarządzania pamięcią / wydajności).
Następną rzeczą, która się dzieje, jest wykonanie OnClick. Strona się nie porusza, nic się nie dzieje na ekranie.
źródło
<a>
element zawsze musi gdzieś iść ; jeśli jest tylko na stronie, aby wykonać jakiś skrypt javascript,<button>
należy zamiast niego użyć Używanie<button>
jest bardziej semantyczne i oszczędza ci całej tej debaty na temat tego, co włamać się do kotwicyhref
. Edycja: wygląda na to, że odpowiedź @Ronnie Royston poniżej zawiera już ten argument.JavaScript: na bok adresy URL; w tym miejscu void może być przydatne do pisania krótszego kodu.
źródło