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

Есть ли способ щелкнуть ссылку на моей странице с помощью JavaScript?


person Community    schedule 23.05.2009    source источник
comment
Вы можете только предварительно сформировать «щелчок» по элементам input type = button.   -  person Ballsacian1    schedule 24.05.2009
comment
@ Ballsacian1 Я использовал .click() в элементе <a>, и это сработало.   -  person PaulMag    schedule 08.08.2019


Ответы (11)


Эта функция работает как минимум в 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;
    }
}
person Matthew Crumley    schedule 24.05.2009
comment
Мэтью прав, и stackoverflow.com/questions/809057/ есть дополнительная информация о том, почему. Кроссбраузерность - это весело :) - person Dan F; 24.05.2009
comment
он не соблюдает атрибут target или <base target="frame"> - person Vitim.us; 09.11.2015

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

location.href = "http://www.example.com/test";
person Fabien Ménager    schedule 23.05.2009
comment
Проголосовал против, потому что мне не нравятся ответы, которые касаются варианта использования, а не касаются его. Я предполагаю, что это ваше намерение, и я не осознаю ваших ограничений, поэтому с концептуальной сферой в концептуальном вакууме: используйте это. - person cazlab; 22.04.2012
comment
Я проголосовал за, потому что искал какое-нибудь хорошее решение - щелкнуть ссылку mailto: в скрипте userjs. Определенно сэкономил мне время. Я был готов создать элемент a и сделать программный щелчок по заголовку stackoverflow.com/questions/809057/ - person A.D.; 04.06.2014
comment
Я тоже пробовал вызвать метод click(), предложенный в другом месте и выше, и он не работал в IE9, но установка location.href фактически отправила электронное письмо по ссылке mailto:. Отличное решение! - person ajeh; 02.03.2015
comment
Этот метод был полезен в PyQT4. вызов click () у меня не работал. Спасибо! - person VilleLipponen; 15.08.2019
comment
Не касается моего варианта использования, о котором идет речь, где я хочу щелкнуть ссылку. Ссылка никуда не ведет, но имеет другие вещи, связанные с событием клика. Я не хочу менять место жительства. - person Random Elephant; 08.01.2020
comment
Это спасло мой проект от непростого случая, когда требовалась перезагрузка страницы при программном перенаправлении. - person Luis Febro; 02.02.2020

Просто так:

<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>
person Canavar    schedule 23.05.2009
comment
Да, но тогда должен произойти какой-то другой щелчок. - person Ólafur Waage; 24.05.2009
comment
Разве вы не можете сделать это при любом событии, например, при загрузке страницы? - person Bill the Lizard; 24.05.2009
comment
спасибо за помощь, но я использую firefox 3, и он не работает, в консоли ошибок отображается ошибка: document.getElementById (myLink) .click не является функцией - person ; 24.05.2009
comment
Похоже, что Firefox не поддерживает метод щелчка. и большинство ответов, в том числе и мой, бесполезны :) - person Canavar; 24.05.2009
comment
@Canavar: попробуйте щелкнуть вместо щелчка - person Stefan Steiger; 26.08.2011

Способ jQuery щелкнуть ссылку:

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

Для ссылки mailTo необходимо написать следующий код

$('#LinkID')[0].click();
person Muhammad Waqas Iqbal    schedule 24.09.2015
comment
Это не работает. Это не ответ на вопрос, который он задал. Я бы дал отрицательный ответ, если бы у меня было еще несколько баллов. - person ; 02.02.2016
comment
Это не работает? Вы пробовали это? Надеюсь, вы понимаете, что означает LinkID. Я был бы очень удивлен, если бы кто-то из сегодняшних дней достаточно отстал от js без jQuery. В любом случае, не стесняйтесь голосовать против после того, как наберете несколько очков. - person Muhammad Waqas Iqbal; 12.03.2016
comment
Я пробовал это, и ссылка mailTo не работает в React Native. Используйте это: window.location.href = mailto: [email protected]; - person fungusanthrax; 10.03.2017
comment
У меня тоже не сработало нажатие на ссылку a. Использование версии [0].click() работает, что, как мне кажется, совпадает с ответом document.getElementById('yourLinkID').click();. - person Mmm; 13.08.2018
comment
Браузер Firefox: работает для ‹input›, но не для ‹a› - person jimver04; 30.08.2018

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

<script> var myVar = setInterval(function ({document.getElementById("test").click();}, 500)); setInterval(function () {clearInterval(myVar)}, 1000));</script>
person Naiguel Developer    schedule 07.02.2017
comment
В показанном коде есть синтаксическая ошибка. Отсутствуют одна или две закрывающие скобки. Я добавил их редактированием. - person Reporter; 21.09.2020

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

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

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

person maus    schedule 03.05.2017
comment
Я не понимаю, почему событие ставится дважды. Я не вижу, как event = new CustomEvent ('щелчок'); является эталонным событием, так в чем смысл var ... - person historystamp; 02.01.2019
comment
Я думаю, что вы правы, штамп истории. Он создает событие мыши, а затем немедленно перезаписывает его новым событием. - person John Lord; 06.07.2020

Можете ли вы вместо щелчка переадресовать URL-адрес, на который будет переходить щелчок, используя Javascript?

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

person Jas Panesar    schedule 23.05.2009
comment
Я ответил на оба вопроса, потому что люди не будут искать информацию о кнопках естественным образом, когда имеют дело со ссылкой тега. Они технически не связаны. - person Scott Tovey; 24.01.2020

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

person akway    schedule 24.05.2009
comment
В моем случае я не знаю, есть ли у ссылки target _blank, поэтому я не знаю, следует ли мне использовать location.href или window.open. Короче отправить клик. Существуют варианты использования, например, вы можете захотеть запустить событие, такое как открытие модального окна. - person dxvargas; 05.05.2017

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

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

var signUperror = document.getElementById('handleError')

if (signUperror) {
  if(signUperror.innerHTML != ""){
  var clicker = function(){
    document.getElementById('signup').click()
  }
  clicker()
  }
}
person Vontei    schedule 05.08.2015

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

Что вы можете сделать, так это нажать на нагрузку на тело. Пример W3Schools можно найти здесь.

person Ólafur Waage    schedule 23.05.2009
comment
@Neolit, это была плохая ссылка до того, как она получила 404. Никаких потерь. - person John Dvorak; 16.02.2014

person    schedule
comment
Фактически, до сих пор он работал во всех браузерах, которые я пробовал, включая IE, Safari, Chrome, Firefox и Opera. - person arik; 29.01.2012
comment
Обратите внимание, что если ссылка имеет свойство target="_blank", в новом окне будет активирован блокировщик всплывающих окон браузера. - person wonsuc; 26.02.2019