Можно ли вызвать событие щелчка по ссылке (или любому элементу) через JavaScript?

Я пишу код JavaScript, который должен запускать событие click для ссылки. В Internet Explorer я могу это сделать

var button = document.getElementById('myButton');
button.click();

Но это не работает в Firefox, как и в любом другом браузере. В Firefox я сделал это

var button = document.getElementById('myButton');
window.location = button.href;

Я чувствую, что это не лучший способ сделать это. Есть ли лучший способ вызвать событие click? Желательно то, что работает независимо от типа элемента или браузера.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
46
0
67 810
6

Ответы 6

Как правило, это невозможно, в mozilla есть метод нажмите (), но только для элементов ввода, а не для ссылок.

Почему бы вам просто не создать функцию, которую кнопка будет вызывать в обработчике onClick, и всякий раз, когда вы хотите «щелкнуть» кнопку, вместо этого вызовите функцию?

Mozilla имеет более строгую политику в отношении разрешенных действий / событий JS - у меня тоже были аналогичные проблемы с событием click (). Он отключен для некоторых элементов, чтобы предотвратить XSS.

Что не так с перенаправлением браузера? Это могло сработать везде.

http://jehiah.cz/archive/firing-javascript-events-properly

function fireEvent(element,event) {
   if (document.createEvent) {
       // dispatch for firefox + others
       var evt = document.createEvent("HTMLEvents");
       evt.initEvent(event, true, true ); // event type,bubbling,cancelable
       return !element.dispatchEvent(evt);
   } else {
       // dispatch for IE
       var evt = document.createEventObject();
       return element.fireEvent('on'+event,evt)
   }
}

Как показывает практика, обычно лучше сначала проверить стандартную функцию (например, createEvent), а только потом проприетарную (например, createEventObject).

kangax 17.09.2009 07:35

Зачем отрицать возвращаемое значение element.dispatchEvent()? И element.dispatchEvent, и element.fireEvent возвращают false, если событие было отменено, в противном случае - true.

Bennett McElwee 16.02.2011 02:50

Я бы не рекомендовал это, но вы можете вызвать атрибут onclick элемента HTML как метод.

<a id = "my-link" href = "#" onclick = "alert('Hello world');">My link</a>

document.getElementById('my-link').onclick();

Эй, я не собираюсь копать старую ветку, но я тоже искал ответ на эту же проблему и нашел функцию, новую для jQuery 1.3x (у меня была проблема с содержимым, загруженным Ajax)

Вот как я это реализовал:

HTML

<a class = "navlink" href = "mypage.html">Online Estimate</a>

ЗАГРУЖЕННЫЙ СКРИПТ

$(".pagelink").click(function(){
    $(".navlink[href = "+$(this).attr("href")+"]").trigger('click');
    return false;
});

ЗАГРУЖЕН HTML

<a class = "pagelink" href = "mypage.html">Online Estimate</a>

Это функция «Триггерное событие» ...
Подробнее об этом здесь: http://docs.jquery.com/Events/trigger#eventdata

Это не будет работать идеально для каждого элемента в 100% случаев. Например, он не перейдет к значению в href, даже если у вас там что-то есть. Пример Криса Макдональда воля работает с каждым элементом и запускает действие по умолчанию, такое как переход к href для тега привязки.

Dan Herbert 17.09.2009 01:20

Это очень верно. Я использую return false; и обхожу фактическую функциональность элемента ссылки, так как я использую jQuery и Ajax для загрузки контента в DOM. В этом случае это наименьшее количество кода и самое чистое решение, но во многих других случаях, как указал Дэн Герберт, предпочтительным выбором будет Chris MacDonald's.

Jordan Rynard 17.09.2009 02:42

Ответ jquery не имеет значения, поскольку вопрос - это тег только с javascript. Причина, по которой я отклонил ваш ответ.

elmuchacho 23.05.2013 18:39

Я отчаянно искал этот тихий, и казалось, что самый простой сработал!

document.getElementById('foo').onclick();

он работал в Chrome 7.0.5 и т.е. 8.0.6

Это будет работать только в том случае, если атрибут onclick был определен в элементе dom!

elmuchacho 23.05.2013 18:43

Что ж, вам следует попытаться дать правильный ответ вместо того, чтобы отвечать на исходный вопрос!

elmuchacho 25.05.2013 20:15

Другие вопросы по теме