Jak wywołać funkcję JavaScript zamiast href w HTML

86

Mam makietę w HTML

<a href="javascript:ShowOld(2367,146986,2)"><img title="next page" alt="next page" src="/themes/me/img/arrn.png"></a>

Otrzymałem odpowiedź z serwera, kiedy wysłałem żądanie.

Z tą makietą otrzymałem jako odpowiedź na żądanie AJAX, które wysyła mój kod do serwera.

Cóż, wszystko jest w porządku, ale kiedy klikam łącze, przeglądarka chce otworzyć funkcję jako łącze; czyli po kliknięciu widzę pasek adresu jako

javascript:ShowOld(2367,146986,2)

oznacza rzecz przeglądarki, która jest adresem URL, jeśli chcę to zrobić w programie firebug, który działa. Teraz chcę to zrobić, a gdy ktoś kliknie łącze, przeglądarka próbuje wywołać funkcję już załadowaną w DOM, zamiast próbować otworzyć ją w przeglądarce.

Brett DeWoody
źródło
Odpowiedzi na podobne pytanie można znaleźć w samym Stackoverflow. stackoverflow.com/questions/1070760/…
Scaria Sebastian

Odpowiedzi:

192

Ta składnia powinna działać poprawnie, ale możesz wypróbować tę alternatywę.

<a href="javascript:void(0);" onclick="ShowOld(2367,146986,2);">

lub

<a href="javascript:ShowOld(2367, 146986, 2);">

ZAKTUALIZOWANA ODPOWIEDŹ NA WARTOŚCI STRINGOWE

Jeśli przekazujesz ciągi znaków, użyj apostrofów jako parametrów funkcji

<a href="javascript:ShowOld('foo', 146986, 'bar');">
Dutchie432
źródło
Jak przekazać w argumentach ciąg znaków unikający podwójnych cudzysłowów? H = Przykład zawiera tylko liczby całkowite.
jeffry copps
1
@jeffrycopps wypróbuj pojedyncze cudzysłowy w swojej funkcji
ineedme
@ineedme Odpowiedź Zaktualizowana o te informacje. Dzięki.
Dutchie432
9

Jeśli masz tylko „moduł obsługi zdarzeń kliknięcia”, użyj <button>zamiast tego. Link ma określone znaczenie semantyczne.

Na przykład:

<button onclick="ShowOld(2367,146986,2)">
    <img title="next page" alt="next page" src="/themes/me/img/arrn.png">
</button>
Felix Kling
źródło
Czy istnieje sposób, aby przycisk wyglądał jak link zamiast przycisku?
Ben Page
@Ben Page: Tak, z CSS. Przynajmniej masz dobre przybliżenie. Zobacz moją odpowiedź i komentarze tutaj: stackoverflow.com/questions/4842953/or-javascriptvoid0/…
Felix Kling
7

Postaraj się, aby Twój javascript nie rzucał się w oczy:

  • powinieneś użyć prawdziwego linku w atrybucie href
  • i dodaj odbiornik po kliknięciu, aby obsłużyć ajax
soju
źródło
hrefjest opcjonalny, po prostu go pomiń.
Colin 't Hart
Znacznik jest kotwicą; nie musi mieć linku.
Colin 't Hart
5

Używam trochę CSS na rozpiętości, aby wyglądało jak łącze:

CSS:

.link {
    color:blue;
    text-decoration:underline;
    cursor:pointer;
}

HTML:

<span class="link" onclick="javascript:showWindow('url');">Click Me</span>

JAVASCRIPT:

function showWindow(url) {
    window.open(url, "_blank", "directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
}
tolsen64
źródło
Powyższy parametr funkcji „url” podaje ciąg „url” zamiast rzeczywistego
adresu
Rzeczywisty adres URL należy umieścić w funkcji showWindow. Na przykład: javascript: showWindow (' stackoverflow.com' );
tolsen64
Nie mogę tego zakodować, ponieważ tworzę go za pomocą dom i nie mam kontroli nad adresem URL
visrahane
3

Należy również oddzielić kod javascript od kodu HTML.
HTML:

<a href="#" id="function-click"><img title="next page" alt="next page" src="/themes/me/img/arrn.png"></a>

javascript:

myLink = document.getElementById('function-click');
myLink.onclick = ShowOld(2367,146986,2);

Upewnij się tylko, że ostatnia linia w funkcji ShowOld to:

return false;

ponieważ spowoduje to zatrzymanie otwierania łącza w przeglądarce.

Brama piekła
źródło
hrefjest opcjonalny, po prostu go pomiń.
Colin 't Hart
3

<a href="#" onclick="javascript:ShowOld(2367,146986,2)">

nico
źródło
8
Nie jest to najlepsze rozwiązanie, ponieważ spowoduje to przejście na górę strony.
Alex Marshall
Dla href zamiast #użyciahref="javascript:void(0)
Narayan
hrefjest opcjonalny, po prostu go pomiń.
Colin 't Hart
1

hrefjest opcjonalne dla aelementów.

W zupełności wystarczy

<a onclick="ShowOld(2367,146986,2)">link text</a>
Colin 't Hart
źródło