Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zdezaktywować href w linku
Forum PHP.pl > Forum > Po stronie przeglądarki
Pilsener
1. Witajcie, mam odnośnik:
  1. <a href="http://forum.php.pl">link</a>

Czy da się zrobić tak, żeby po kliknięciu w element przeglądarka nie wysyłała żądania? Czyli po prostu zwykły link, tyle żeby nie działał.

2. Mam np. taki odnośnik:
  1. <a>link</a>

Czy da się zrobić tak, żeby po najechaniu na taki link w pasku stanu pojawił np. odnośnik http://forum.php.pl?

Jak macie jakieś pomysły jak prosto osiągnąć takie efekty to byłbym wdzięczny winksmiley.jpg
slightyboy
Znacznik <a> musi posiadać zdeklarowane "href" (odnośnik). Efekt, o którym mówisz, można osiągnąć przy użyciu JavaScript.

Kod
<a href="" onClick="return false;">asd</a>
Pilsener
Cytat
Znacznik <a> musi posiadać zdeklarowane "href"
- wg mnie href jest dla <a> opcjonalny, ale nie sądzę, by to miało jakieś znaczenie.

Wolałbym uniknąć JS, ale tutaj chyba się nie da, dzięki za sposób z onclick.
Crozin
Cytat
- wg mnie href jest dla <a> opcjonalny
To jakie znaczenie miałby mieć element A bez HREF? Pomijam fakt, że specyfikacja jasno określa, że dla tego elementu ten atrybut jest wymagany.

Jeżeli chcesz by link nigdzie nie prowadził - to nie dawaj tam linka. Jeżeli chodzi Ci o uzyskanie jakiegoś efektu wizualnego - da się to zrobić przy pomocy CSS na dowolnym elemencie.
viking
Kod
<!ATTLIST a
href        %URI;          #IMPLIED
>


Nie jest wymagany. Możesz zrobić href="#".
sowiq
Cytat(Pilsener @ 15.08.2009, 14:23:57 ) *
Czy da się zrobić tak, żeby po najechaniu na taki link w pasku stanu pojawił np. odnośnik http://forum.php.pl?
Jeśli chcesz oszukiwać userów, tzn. robić fake-linki, które kierują w zupełnie inne miejsce niż na to wskazuje napis w pasku stanu, to się zastanów dwa razy. Może zrobisz usera w balona raz, a może pięć, ale on już więcej na Twoją stronę nie wróci po takich akcjach.

A odpowiadając na pytanie - w pasku stanu pojawia się link umieszczony w parametrze href. Żeby deaktywować linki albo kierować na inną stronę po kliknięciu możesz użyć JS, ale to na nic jeśli user kliknie sobie na linka prawym przyciskiem myszy i wybierze otwórz w nowej karcie. Wtedy zawsze brana jest wartość href i nie jest wykonywane zdarzenie onclick.
Pilsener
Cytat
To jakie znaczenie miałby mieć element A bez HREF?
- takie, jak każdy inny element liniowy, który można ostylować.

Cytat
Jeśli chcesz oszukiwać userów
- nic z tych rzeczy, zresztą i tak nigdy nie wiesz, gdzie zostaniesz przekierowany winksmiley.jpg
Cytat
ale to na nic jeśli user kliknie sobie na linka prawym przyciskiem myszy i wybierze otwórz w nowej karcie. Wtedy zawsze brana jest wartość href i nie jest wykonywane zdarzenie onclick
- tego się właśnie obawiałem.

A pytam o to wszystko dlatego, że na stronach używa się zarówno <a> jak i <input type="submit" />, jednak oba rozwiązania mają swoje wady:
- gdy mam <a> i klikam np. ?go=dodaj_do_koszyka&id=3 to potem muszę usunąć te zmienne z adresu, a jak wiadomo przekierowania nie są zalecane ze względu na wydajność
- gdy używam input, to największą wadą jest trudność w ostylowaniu tego tak, aby wyglądał jak link (a href to tylko efekt wieńczący dzieło, najważniejsza jest łatwość użycia pseudoklasy hover)

Dlatego wpadłem na pomysł ujednolicenia wszystkich przycisków tak, aby wyglądały jak linki lecz aby user nie widział, który wysyła POST, a który GET, w kodzie wygląda to mniej więcej tak:
  1. <a class="przycisk" href="http://forum.php.pl"></a>
- link jako link, tylko GET
  1. <a class="przycisk" href="http://forum.php.pl"><input type="submit" name="akcja" value="" /></a>
- link jako submit, tylko POST

Całość można tak ostylować, że bez zaglądania w kod nie ma różnicy - jednak ten drugi link ma pewien feler - działa "poprawnie" tylko w IE 6.0, w każdej normalnej przeglądarce jest wysyłany zarówno POST, jak i GET (zdaje się, że najpierw leci POST), stąd moje pytanie winksmiley.jpg

Może jeszcze do czegoś innego tego potrzebuję, ale przynajmniej nie powiecie, że pytam bezcelowo winksmiley.jpg
jmail
masz przykłąd zrobienia przycisku który wygląda jak link

  1.  
  2. <input type="button" class="przycisk" value="wyslij" onmouseover="this.className = 'przycisk przycisk_hover'" onmouseout="this.className = 'przycisk'">
  3.  


i css

  1.  
  2. .przycisk{
  3. border: 0px;
  4. background: none;
  5. cursor: pointer;
  6. }
  7.  
  8. .przycisk_hover{
  9. text-decoration: underline
  10. }
Crozin
Cytat
- takie, jak każdy inny element liniowy, który można ostylować.
Nie. A definiuje hiperłącze i tyle. Chcesz mieć element liniowy bez żadnego semantycznego znaczenia? Użyj SPAN.

Dla każdego elementu możesz bez problemów używać pseudoklasy :hover. IE6? Olać - zalecane, skorzystać z whatever:hover czy czegoś w tym stylu.

Sam cel też wydaje mi się nieco bez sensu.
W czym tak bardzo przeszkadzają Ci te zmienne w adresie? Czy te przekierowania to główny powód przeciążenia serwera?

A jeżeli już tak bardzo Ci zależy na tym, to proponowałbym tu skorzystać z JS. Zdarzenie click dla A, które w locie tworzy formularz o action równym (tu fragment URLa) z kilkoma inputami oraz go wysyła.
Osób bez JS lub świadomie go wyłączających jest bardzo mało - one nie umrą z powodu kilku zmiennych w adresie, a serwer nie będzie tym przeciążony.
erix
Cytat
Czy da się zrobić tak, żeby po kliknięciu w element przeglądarka nie wysyłała żądania? Czyli po prostu zwykły link, tyle żeby nie działał.

Kombinujecie...

Google: preventDefault.

Cytat
A pytam o to wszystko dlatego, że na stronach używa się zarówno <a> jak i <input type="submit" />, jednak oba rozwiązania mają swoje wady:
- gdy mam <a> i klikam np. ?go=dodaj_do_koszyka&id=3 to potem muszę usunąć te zmienne z adresu, a jak wiadomo przekierowania nie są zalecane ze względu na wydajność

A po co usuwać...? O.o

Cytat
- gdy używam input, to największą wadą jest trudność w ostylowaniu tego tak, aby wyglądał jak link (a href to tylko efekt wieńczący dzieło, najważniejsza jest łatwość użycia pseudoklasy hover)

A nie możesz jej użyć dla input? Robisz na siłę problem...
Pilsener
Sami widzicie, że jak napisałem cel, jaki mi przyświeca to każdy kwestionuje tą celowość winksmiley.jpg

1. Zmienne aż tak bardzo nie przeszkadzają, ale to nieestetyczne i pojawia się problem, kiedy klient odświeża stronę - trzeba zaraz odróżnić, kiedy odświeża a kiedy klika w link, jest cała masa sytuacji, w których link typu usun&id=123 nie ma po wykonaniu akcji racji bytu.

2. A co do hover dla input'a to jak wiadomo IE 6.0 tutaj nam bruździ - na szczęście niedługo (przynajmniej taką mam nadzieję) będzie można olać tego browsera z epoki kamiennej i skończy się ten problem.

Cytat
Kombinujecie...
- no chyba to nie przestęstwo? Kto kombinuje ten żyje winksmiley.jpg Jeśli można niskim nakładem pracy uzyskać bardziej idealny efekt na stronie to czemu nie skorzystać?

Dzięki wszystkim za pomoc, pokombinuje z tym JS w wolnej chwili.
dr_bonzo
Cytat
1. Zmienne aż tak bardzo nie przeszkadzają, ale to nieestetyczne i pojawia się problem, kiedy klient odświeża stronę - trzeba zaraz odróżnić, kiedy odświeża a kiedy klika w link, jest cała masa sytuacji, w których link typu usun&id=123 nie ma po wykonaniu akcji racji bytu.

A redirect po POSTcie?
Cytat
- gdy mam <a> i klikam np. ?go=dodaj_do_koszyka&id=3 to potem muszę usunąć te zmienne z adresu, a jak wiadomo przekierowania nie są zalecane ze względu na wydajność

I wlasnie temu wszyscy tego uzywaja, bo rozwiazuje problem bardzo szybko i w prosciutki sposob?


Co do rozwiazania: ja kiedys onclick dodawalem JSem ukryty formularz, z action == a.href i go wysylalem .submit() + preventDefault na linku, działa.
Wada to to ze widzisz link, chcesz go kliknac zeby sie otworzyl w tle, a sie nie da.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.