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.


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');">

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>

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

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");
}

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.


hrefjest opcjonalny, po prostu go pomiń.
Colin 't Hart

3

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


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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.