Как программно щелкнуть ссылку с помощью JavaScript?

174

Есть ли способ нажать на ссылку на моей странице, используя JavaScript?

Махди Алхатиб
источник
6
Вы можете предварительно выполнить «щелчок» только по элементам input type = "button".
Ballsacian1
1
@ Ballsacian1 я использовал .click()на <a>элемент и он работал.
PaulMag

Ответы:

238
document.getElementById('yourLinkID').click();
ярик
источник
18
На самом деле, пока это работает во всех браузерах, которые я пробовал, включая IE, Safari, Chrome, Firefox и Opera.
арик
5
Обратите внимание, что если ссылка имеет target="_blank"свойство, в новом окне будет активирован блокировщик всплывающих окон браузера.
Вонсук
45

Эта функция работает как минимум в Firefox и Internet Explorer. Он запускает любые обработчики событий, прикрепленные к ссылке, и загружает связанную страницу, если обработчики событий не отменяют действие по умолчанию.

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;
    }
}
Мэтью Крамли
источник
5
Мэтью прав, и stackoverflow.com/questions/809057/… имеет больше информации о том, почему. Кросс-браузер это весело :)
Дан Ф
4
это не уважает targetатрибут или<base target="frame">
Vitim.us
38

Если вы хотите изменить только адрес текущей страницы, вы можете сделать это, просто выполнив это в Javascript:

location.href = "http://www.example.com/test";
Фабьен Менагер
источник
53
Отклонено, потому что мне не нравятся ответы, которые отвечают вокруг варианта использования, а не обращаются к нему. «Я предполагаю, что это ваше намерение, и я не знаю о ваших ограничениях, поэтому с концептуальной сферой в концептуальной вакцине: используйте это».
cazlab
11
Я проголосовал, потому что я искал какое-нибудь хорошее решение, нажав на mailto:ссылку в скрипте userjs. Определенно сэкономил мне время. Я был готов создать aэлемент и сделать несколько «программных кликов» stackoverflow.com/questions/809057/…
AD
6
Я тоже попробовал click()метод вызова, предложенный в другом месте и выше, и он не работал в IE9, но настройки location.hrefфактически отправили письмо по mailto:ссылке. Отличное решение!
ajeh
Этот метод был полезен в PyQT4. вызов click () не работал для меня. Спасибо!
VilleLipponen
Не касается моего варианта использования, который находится в вопросе, где я хочу нажать на ссылку. Ссылка никуда не ведет, но с событием клика связаны другие вещи. Я не хочу менять местоположение.
Случайный Слон
17

Просто так:

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

или при загрузке страницы:

<body onload="document.getElementById('myLink').click()">
...
<a id="myLink" onclick="alert('link click');">LINK 1</a>
...
</body>
Canavar
источник
2
Да, но тогда должен произойти какой-то другой щелчок.
Олафур Вааге
2
Разве вы не можете сделать это на каком-либо событии, например, загрузке страницы?
Билл Ящерица
2
спасибо за помощь, но я использую Firefox 3, и он не работает, в консоли ошибок появляется сообщение об ошибке: document.getElementById ("myLink"). щелчок не является функцией
Похоже, что Firefox не поддерживает метод click. и большинство ответов, включая мой, не помогают :)
Canavar
@Canavar: попробуй кликни вместо клика
Stefan Steiger
9

JQuery способ щелкнуть ссылку

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

Для mailTo ссылку, вы должны написать следующий код

$('#LinkID')[0].click();
Мухаммед Вакас Икбал
источник
2
Это не работает. Это не ответ на вопрос, который он задал. Я бы дал отрицательный ответ на это, если бы у меня было больше очков.
2
Это не работает? Вы пробовали это? Надеюсь, вы понимаете, что означает «LinkID». Я был бы очень удивлен, если бы кто-то сейчас достаточно отсталый для js без jQuery. Во всяком случае, не стесняйтесь понизить голос после получения некоторых очков
Мухаммед Вакас Икбал
3
Я попробовал это, и ссылка mailTo не работает в React Native. Используйте это: window.location.href = "mailto: address@gmail.com";
fungusanthrax
4
Для меня это тоже не сработало за переход по aссылке. Использование [0].click()версии работает, что я считаю, совпадает с document.getElementById('yourLinkID').click();ответом.
Ммм
Браузер Firefox: это работает для <input>, но не для <a>
jimver04
2

Для меня мне удалось заставить это работать таким образом. Я развернул автоматический клик за 5000 миллисекунд, а затем замкнул цикл через 1000 миллисекунд. Тогда был только 1 автоматический клик.

<script> var myVar = setInterval(function ({document.getElementById("test").click();}, 500); setInterval(function () {clearInterval(myVar)}, 1000); </script>
Naiguel Developer
источник
2

Многие из вышеперечисленных методов устарели. Теперь рекомендуется использовать конструктор, найденный здесь

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

Это приведет к щелчку по тегу привязки, но он не покажет, активны ли блокировщики всплывающих окон, поэтому пользователю нужно будет разрешить всплывающие окна.

Maus
источник
3
Я не понимаю, почему событие устанавливается дважды. Я не вижу, как event = new CustomEvent ('click'); является эталонным событием, так в чем же смысл вар ...
Historystamp
Я думаю, что вы правы исторический штамп. Он создает событие мыши, а затем немедленно перезаписывает его новым событием.
Джон Лорд
1

Вместо того, чтобы кликать, можете ли вы переадресовать на URL, по которому клик будет переходить с использованием Javascript?

Может быть, вы могли бы положить что-то в тело на загрузку, чтобы пойти туда, куда вы хотите.

Джас Панесар
источник
Я отвечал на оба вопроса, потому что люди не собираются искать информацию о кнопках, когда имеют дело со ссылкой «тег». Они технически не связаны.
Скотт Тови
1

Вы можете просто перенаправить их на другую страницу. На самом деле заставить его буквально щелкнуть по ссылке и перейти к нему кажется странным, но я не знаю всей истории.

akway
источник
2
В моем случае я не знаю, имеет ли ссылка цель "_blank", поэтому я не знаю, должен ли я использовать location.href или window.open. Короче отправить клик. Есть варианты использования, например, вы можете запустить событие, например, открыть модалбокс.
dxvargas
-2

Вы не можете заставить мышь пользователя делать что-либо. Но у вас есть полный контроль над тем, что происходит, когда происходит событие.

То, что вы можете сделать, это нажать на нагрузку на тело. У W3Schools есть пример здесь.

Олафур Вааге
источник
6
@Neolit ​​это была плохая ссылка, прежде чем она все равно получила 404. Без потерь
Джон Дворжак
-2

Функция JS на стороне клиента для автоматического перехода по ссылке, когда ...

Вот пример, где вы проверяете значение скрытого ввода формы, в котором хранится ошибка, переданная с сервера ... ваш клиентский JS-сервер затем проверяет его значение и заполняет ошибку в другом месте, которое вы укажете ... в этом случай всплывающего модального имени входа.

var signUperror = document.getElementById('handleError')

if (signUperror) {
  if(signUperror.innerHTML != ""){
  var clicker = function(){
    document.getElementById('signup').click()
  }
  clicker()
  }
}
Vontei
источник