Як викликати подію кліку на елементі href


80

Я намагаюся викликати подію клацання на гіперпосиланні за допомогою jQuery, як показано нижче. Гіперпосилання не має жодного ідентифікатора, але має cssclass

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

Функція вище не працює. Це гіперпосилання

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

1
Оскільки клас можна застосувати до декількох елементів у DOM, здається, не є гарною ідеєю викликати клацання на них.
Ігор Парра

1
NomikOS, ти дуже правий щодо цього, але я перевірив, чи використовує якийсь інший елемент цей клас css :)
MonsterMMORPG

Відповіді:


78

Я не маю фактичних доказів, щоб підтвердити це, але я вже стикався з цим питанням. Здається, що ініціювання події click () на <a>тезі, здається, поводиться не так, як ви очікували б, скажімо, кнопка введення.

Обхідним шляхом, який я застосував, було встановити властивість location.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 для візуалізації коду, робить це невдалим.


це правильна відповідь. дякую :) я також помітив, що натискання на href не працює.
MonsterMMORPG

@MonsterMMorpg Майте на увазі, що це не призводить до того, що браузер вважає, що це пряма дія користувача. Тож використовуйте розумно = D
Метью Кокс

Це не повинно бути var href = $ ('. Cssbuttongo'). Attr ('href');
Luci

7
Це ігнорує можливість того, що посилання також має onclickподію. Просто зробіть, $('.cssbuttongo')[0].click()щоб правильно імітувати клік повністю.
Роман Старков

Насправді це працює лише на повному href. Оскільки я не міг розмістити тут код, будь ласка, прочитайте мою відповідь на цю публікацію.
Алан Донг,

210

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

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

Це працює незалежно від того, hrefє URL-адресою, фрагментом (наприклад #blah) або навіть javascript:.

Зверніть увагу, що це викликає clickметод DOM замість методу jQuery click(який є дуже неповним і повністю ігнорує href).


2
@Timwi, я мав на увазі сказати, що перший $('.cssbuttongo').click(); // ignores href!не гарантує роботи. Останній завжди буде працювати, оскільки використання index [0] зробить jQuery Object звичайним JS-об’єктом, який точно відповідає тому, який використовує один браузер. @Wei Liu
Alan Dong

1
Чудово! Дуже пряма та ілюстративна відповідь.
caiosm1005

11
Це має бути обрана відповідь. Працювали чудово!
Amit G

3
@AdilMalik Це працює, оскільки jquery - це не єдине, що має метод click (). Цей код викликає метод non-jquery click (), це рідна DOM-річ.
Роман Старков

1
@Timwi Я надаю тут jsfiddle
Nabi KAZ,

31

На додаток до чудової відповіді romkyns .. ось кілька відповідних документацій / прикладів.


Елементи 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

Виконання клацання за допомогою JavaScript не відкриє гіперпосилання. Це міра безпеки, вбудована в браузер.

Однак див. Це запитання для деяких обхідних шляхів.


1
Я не думаю .. ТАМО: Я ЗНАЙШИВ, ЩО ТАКИЙ РАБОТИ
Коді

3
@CodyDmd - це все ще подія, яку ініціює користувач. Не те саме, що оригінальне питання ОП.
Blazemonger

@CodyDmd Здається, [0]це важливо у твоїй скрипці
Вей Лю

3
Якої вразливості це захищає, власне?
Роман Старков

3
Ну, я не знаю, що ви маєте на увазі, Blazemonger, тому що у Firefox, а також Chrome чи IE11 немає такого захисту від завантажень чи шахрайства із натисканням SEO. Іншими словами, і перше, і друге речення Вашої відповіді є неправдивими .
Роман Старков

3

Просто хочу повідомити вас, прийнята відповідь не завжди працює.

Ось приклад, що це не вдасться.

якщо <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 способом

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

Нарешті, викликайте його, щоб змінити URL-адресу поточної сторінки браузера

window.location.href = href

або висуньте його за допомогою window.open(url)

Ось приклад у JSFiddle.


Отже, ви говорите, що це не спрацьовує, якщо змінити його на $('css_selector')[0].click()? Це працює в цій JsFiddle ...
Роман Старков

Для протоколу, не я проголосував; Я думаю, що тут може щось бути, і я ще не впевнений.
Роман Старков

@romkyns, Звичайно, це буде працювати після того, як ви витягнете з елементів jQuery за допомогою [0] (Це стає чистою JS), я мав на увазі сказати $('.cssbuttongo').click();, що не буде працювати, оскільки він дає лише те, що має значення href, замість URL-адреси браузер використовує. Вибачте за оманливі коментарі.
Алан Донг,

2
@LinDong: Якщо ви знаєте, що це [0].click()працює, чому у вашій відповіді про це не згадується?
Тімві

location.hrefприймає відносні шляхи, тому використання /listавтоматично додасть поточний домен. Тож це працює.
Тім

-1

Я стикався з подібною проблемою, як натиснути кнопку замість посилання. Це не мало успіху в методах .trigger ('click') або [0] .click (), і я не знав, чому. Нарешті, у мене працювало таке:

$('#elementid').mousedown();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.