Jquery, как вызвать событие нажатия на элемент href - PullRequest
73 голосов
/ 03 ноября 2011

Я пытаюсь вызвать событие клика по гиперссылке с помощью jquery, как показано ниже. У гиперссылки нет идентификатора, но есть cssclass

 $(document).ready(function () {  $('.cssbuttongo').trigger('click'); }); 

Функция выше не работает. Это гиперссылка

<a href="hyperlinkurl" class="cssbuttongo">hyperlink anchor</a>

Спасибо за ответы.

Ответы [ 6 ]

186 голосов
/ 13 февраля 2014

Собственный метод DOM делает правильные вещи:

$('.cssbuttongo')[0].click();
                  ^
              Important!

Это работает независимо от того, является ли href URL-адресом, фрагментом (например, #blah) или даже javascript:.

Обратите внимание, что это вызывает метод DOM click вместо метода jQuery click (который очень неполный и полностью игнорирует href).

65 голосов
/ 03 ноября 2011

У меня нет фактических доказательств, чтобы доказать это, но я уже столкнулся с этой проблемой.Кажется, что запуск события click () для тега <a>, похоже, не ведет себя так, как можно было бы ожидать, скажем, от кнопки ввода.

Обходное решение, которое я использовал, было установить местоположение.Свойство href в окне, которое заставляет браузер загружать ресурс запроса следующим образом:

$(document).ready(function()
{
      var href = $('.cssbuttongo').attr('href');
      window.location.href = href; //causes the browser to refresh and load the requested url
   });
});

Редактировать:

Я бы сделал скрипку js, но характер вопроса смешался с тем, как jsfiddleиспользует iframe для рендеринга кода, что не нужно.

28 голосов
/ 19 января 2015

В дополнение к замечательному ответу Ромкинса .. вот некоторые соответствующие документы / примеры.


Элементы DOM имеют собственный .click() метод .

Метод HTMLElement.click() имитирует щелчок мыши по элементу.

Когда используется щелчок, он также запускает событие щелчка элемента, которое всплывает до элементов выше дерева документа (или цепочки событий) и также запускает их события щелчка. Однако всплывающее окно события щелчка не приведет к тому, что элемент <a> начнет навигацию, как если бы был получен настоящий щелчок мышью. (ссылка mdn)

Соответствующая W3 документация .


Несколько примеров ..

  • Вы можете получить доступ к определенному элементу DOM из объекта jQuery: (пример)

    $('a')[0].click();
    
  • Вы можете использовать метод .get() для извлечения элемента DOM из объекта jQuery: (пример)

    $('a').get(0).click();
    
  • Как и ожидалось, вы можете выбрать элемент DOM и вызвать метод .click(). (пример)

    document.querySelector('a').click();
    

Стоит отметить, что jQuery не требуется для запуска нативного .click() события.

4 голосов
/ 03 ноября 2011

Запуск клика через JavaScript не приведет к открытию гиперссылки. Это мера безопасности, встроенная в браузер.

См. этот вопрос , но некоторые обходные пути.

3 голосов
/ 29 мая 2014

Просто хочу, чтобы вы, ребята, знали, принятый ответ не всегда работает.

Вот пример, который не удастся.

если <href='/list'>

href = $('css_selector').attr('href')
"/list"
href = document.querySelector('css_selector').href
"http://localhost/list"

или вы можете добавить href, который вы получили от jQuery, к этому

href = document.URL +$('css_selector').attr('href');

или jQuery way

href = $('css_selector').prop('href')

Наконец, вызовите его, чтобы изменить URL текущей страницы браузера

window.location.href = href

или всплыть с помощью window.open(url)

Вот пример в JSFiddle.

0 голосов
/ 05 апреля 2015

У меня возникла похожая проблема, как нажать кнопку вместо ссылки.Не удалось в методах .trigger ('click') или [0] .click (), и я не знал почему.Наконец-то у меня сработало:

$('#elementid').mousedown();
...