Jak programowo kliknąć łącze za pomocą javascript?

173

Czy istnieje sposób na kliknięcie linku na mojej stronie przy użyciu JavaScript?

Mahdi Alkhatib
źródło
6
Możesz wykonać tylko „kliknięcie” elementów input type = „button”.
Ballsacian 1
@ Ballsacian1 Użyłem .click()na <a>elemencie i zadziałało.
PaulMag

Odpowiedzi:

237
document.getElementById('yourLinkID').click();
arik
źródło
18
Właściwie to działało do tej pory we wszystkich przeglądarkach, które próbowałem, w tym IE, Safari, Chrome, Firefox i Opera.
arik
5
Zwróć uwagę, że jeśli link ma target="_blank"właściwość, w nowym oknie zostanie aktywowana funkcja blokowania wyskakujących okienek przeglądarki.
wonsuc
45

Ta funkcja działa przynajmniej w przeglądarkach Firefox i Internet Explorer. Uruchamia wszystkie programy obsługi zdarzeń dołączone do łącza i ładuje połączoną stronę, jeśli programy obsługi zdarzeń nie anulują domyślnej akcji.

function clickLink(link) {
    var cancelled = false;

    if (document.createEvent) {
        var event = document.createEvent("MouseEvents");
        event.initMouseEvent("click", true, true, window,
            0, 0, 0, 0, 0,
            false, false, false, false,
            0, null);
        cancelled = !link.dispatchEvent(event);
    }
    else if (link.fireEvent) {
        cancelled = !link.fireEvent("onclick");
    }

    if (!cancelled) {
        window.location = link.href;
    }
}
Matthew Crumley
źródło
5
Matthew ma rację, a stackoverflow.com/questions/809057/ ... ma więcej informacji o tym, dlaczego. Cross browser jest fajne :)
Dan F
4
nie szanuje targetatrybutu lub<base target="frame">
Vitim.us
38

Jeśli chcesz zmienić tylko bieżący adres strony, możesz to zrobić, po prostu robiąc to w Javascript:

location.href = "http://www.example.com/test";
Fabien Ménager
źródło
53
Odebrano, ponieważ nie lubię odpowiedzi, które odpowiadają na temat przypadku użycia, zamiast go omawiać. „Przypuszczam, że taki jest twój zamiar i nie jestem świadomy twoich ograniczeń, więc w przypadku sfery pojęciowej w koncepcyjnej próżni: użyj tego”.
cazlab
11
mailto:Oddałem głos, ponieważ szukałem fajnego rozwiązania polegającego na kliknięciu linku w skrypcie userjs. Zdecydowanie zaoszczędził mi czas. Byłem przygotowany do stworzenia aelementu i zrobienia jakiegoś "programowego kliknięcia" stackoverflow.com/questions/809057/ ...
AD
6
Ja też próbowałem wywołać click()metodę zaproponowaną gdzie indziej i powyżej i nie działała ona w IE9, ale ustawienie location.hreffaktycznie wysłało e-mail z mailto:linku. Świetne rozwiązanie!
ajeh
Ta metoda była pomocna w PyQT4. połączenie click () nie działa dla mnie. Dzięki!
VilleLipponen
Nie dotyczy mojego przypadku użycia, którego dotyczy pytanie, w którym chcę kliknąć łącze. Link prowadzi donikąd, ale ma inne rzeczy związane ze zdarzeniem kliknięcia. Nie chcę zmieniać lokalizacji.
Random Elephant
17

Po prostu tak:

<a id="myLink" onclick="alert('link click');">LINK 1</a>
<a id="myLink2" onclick="document.getElementById('myLink').click()">Click link 1</a>

lub podczas ładowania strony:

<body onload="document.getElementById('myLink').click()">
...
<a id="myLink" onclick="alert('link click');">LINK 1</a>
...
</body>
Canavar
źródło
2
Tak, ale wtedy musi nastąpić inne kliknięcie.
Ólafur Waage
2
Nie możesz tego zrobić na jakimkolwiek wydarzeniu, takim jak ładowanie strony?
Bill the Lizard
2
dzięki za pomoc, ale ja używam firefox 3 i to nie działa, w konsoli błędu wyświetla się komunikat Error: document.getElementById ("myLink"). kliknięcie nie jest funkcją
Wygląda na to, że Firefox nie obsługuje metody klikania. a większość odpowiedzi, w tym moja, nie jest pomocna :)
Canavar
@Canavar: Spróbuj kliknąć zamiast klikać
Stefan Steiger
9

Sposób kliknięcia łącza w jQuery to

$('#LinkID').click();

W przypadku linku mailTo musisz napisać następujący kod

$('#LinkID')[0].click();
Muhammad Waqas Iqbal
źródło
2
To nie działa. To nie jest odpowiedź na zadane przez niego pytanie. Gdybym miał więcej punktów, dałby na to negatywną opinię.
2
To nie działa? Próbowałeś tego? Mam nadzieję, że rozumiesz, co oznacza „LinkID”. Byłbym naprawdę zdziwiony, gdyby ktoś teraz-a-days był na tyle cofnięty, aby js bez jQuery. W każdym razie, po zdobyciu kilku punktów możesz przegłosować
Muhammad Waqas Iqbal
3
Próbowałem tego i link mailTo nie działa w React Native. Użyj tego: window.location.href = "mailto: [email protected]";
fungusanthrax
4
To nie zadziałało również w przypadku kliknięcia alinku. Korzystanie z [0].click()wersji działa, co moim zdaniem jest takie samo jak document.getElementById('yourLinkID').click();odpowiedź.
Mmm,
Przeglądarka Firefox: działa dla <input>, ale nie dla <a>
jimver04
2

Dla mnie udało mi się to w ten sposób działać. Wdrożyłem automatyczne kliknięcie w 5000 milisekund, a następnie zamknąłem pętlę po 1000 milisekundach. Wtedy było tylko 1 automatyczne kliknięcie.

<script> var myVar = setInterval(function ({document.getElementById("test").click();}, 500); setInterval(function () {clearInterval(myVar)}, 1000); </script>
Naiguel Developer
źródło
2

Wiele z powyższych metod zostało wycofanych. Zaleca się teraz użycie konstruktora znalezionego tutaj

function clickAnchorTag() {
    var event = document.createEvent('MouseEvent');
    event = new CustomEvent('click');
    var a = document.getElementById('nameOfID');
    a.dispatchEvent(event);
}

Spowoduje to kliknięcie tagu kotwicy, ale nie będzie pokazywać, jeśli blokowanie wyskakujących okienek jest aktywne, więc użytkownik będzie musiał zezwolić na wyskakujące okienka.

mysz
źródło
3
Nie rozumiem, dlaczego zdarzenie jest ustawiane dwukrotnie. Nie widzę, jak event = new CustomEvent („click”); jest wydarzeniem referencyjnym, więc po co var ...
historystamp
myślę, że masz rację historystamp. Tworzy wydarzenie myszy, a następnie natychmiast zastępuje je nowym wydarzeniem.
John Lord
1

Czy zamiast klikać, możesz przekierować do adresu URL, do którego prowadziło kliknięcie, za pomocą JavaScript?

Może mógłbyś umieścić coś w ciele OnLoad, aby iść tam, gdzie chcesz.

Jas Panesar
źródło
Opublikowałem odpowiedzi na oba pytania, ponieważ ludzie nie będą w naturalny sposób wyszukiwać informacji o przyciskach, gdy mają do czynienia z łączem „znacznik”. Nie są ze sobą powiązane technicznie.
Scott Tovey
1

Możesz po prostu przekierować ich na inną stronę. Właściwie dosłowne kliknięcie linku i podróż do niego wydaje się nieuniknione, ale nie znam całej historii.

tak
źródło
2
W moim przypadku nie wiem, czy link ma docelowy „_blank”, więc nie wiem, czy powinienem użyć location.href czy window.open. Kliknięcie trwa krócej. Istnieją przypadki użycia, na przykład możesz chcieć uruchomić zdarzenie, takie jak otwarcie modalbox.
dxvargas
-2

Nie możesz zmusić myszy użytkownika do niczego. Ale masz pełną kontrolę nad tym, co się stanie, gdy zdarzenie zostanie wyzwolone.

Możesz kliknąć na obciążenie ciała. W3Schools ma tutaj przykład .

Ólafur Waage
źródło
6
@Neolit ​​to był zły link, zanim i tak dostał 404. Bez strat.
John Dvorak
-2

Funkcja JS po stronie klienta, aby automatycznie kliknąć łącze, gdy ...

Oto przykład, w którym sprawdzasz wartość ukrytych danych wejściowych formularza, które przechowują błąd przekazany z serwera .. Twój klient JS następnie sprawdza jego wartość i wypełnia błąd w innym określonym przez Ciebie miejscu .. w tym przypadku wyskakującego okienka logowania.

var signUperror = document.getElementById('handleError')

if (signUperror) {
  if(signUperror.innerHTML != ""){
  var clicker = function(){
    document.getElementById('signup').click()
  }
  clicker()
  }
}
Vontei
źródło