Имитация щелчка в jQuery/JavaScript по ссылке
Я хочу имитировать щелчок по любой ссылке на странице с помощью JavaScript. Если у этой ссылки есть некоторая функция, привязанная к ее событию onclick (любым другим JS я не контролирую), тогда эту функцию нужно вызывать иначе, ссылка должна вести себя обычным образом и открывать новую страницу.
Я не уверен, что достаточно проверить значение обработчика onclick. Я хочу построить это так, чтобы он работал над любым элементом ссылки.
Я не могу контролировать, какая функция может быть привязана к событию onclick ссылки, используя любую библиотеку JS (не обязательно jQuery) или просто используя JavaScript.
EDIT: с помощью приведенных ниже ответов выглядит так, что можно проверить обработчики событий с помощью jQuery или с помощью атрибута onclick
. Как проверить обработчики событий, прикрепленные с помощью addEventListener
/любой другой библиотеки JS, чтобы она была надежной?
Ответы
Ответ 1
Вы можете использовать функцию click для запуска события клика на выбранном элементе.
Пример:
$( 'selector for your link' ).click ();
Вы можете узнать о различных селекторах в документации jQuery .
EDIT: как отмечают комментаторы ниже; это работает только на событиях, связанных с jQuery, inline или в стиле "element.onclick". Он не работает с addEventListener, и он не будет следовать за ссылкой, если никакие обработчики событий не определены.
Вы могли бы решить это примерно так:
var linkEl = $( 'link selector' );
if ( linkEl.attr ( 'onclick' ) === undefined ) {
document.location = linkEl.attr ( 'href' );
} else {
linkEl.click ();
}
Не знаю о addEventListener, хотя.
Ответ 2
Почему не просто хороший "javascript"?
$('#element')[0].click()
Ответ 3
Просто
$("#your_item").trigger("click");
используя .trigger(), вы можете имитировать много типов событий, просто передавая их как параметр.
Ответ 4
Легко! Просто используйте функцию jQuery click:
$("#theElement").click();
Ответ 5
Попробуйте это
function submitRequest(buttonId) {
if (document.getElementById(buttonId) == null
|| document.getElementById(buttonId) == undefined) {
return;
}
if (document.getElementById(buttonId).dispatchEvent) {
var e = document.createEvent("MouseEvents");
e.initEvent("click", true, true);
document.getElementById(buttonId).dispatchEvent(e);
} else {
document.getElementById(buttonId).click();
}
}
и вы можете использовать его как
submitRequest("target-element-id");
Ответ 6
Сначала просмотрите question, чтобы узнать, как вы можете найти, если ссылка имеет назначенный ему обработчик jQuery.
Следующее использование:
$("a").attr("onclick")
чтобы увидеть, назначено ли ему событие javascript.
Если любое из приведенных выше значений истинно, тогда вызовите метод click. Если нет, получите ссылку:
$("a").attr("href")
и следуйте за ним.
Я боюсь, что не знаю, что делать, если addEventListener используется для добавления обработчика событий. Если вы отвечаете за полный источник страницы, используйте только обработчики событий jQuery.
Ответ 7
Все это может не сказаться, когда вы используете кнопку удаленной формы rails для имитации щелчка. Я попытался отобразить симпатичное симуляцию событий из прототипа здесь: мои фрагменты. Просто сделал это, и это работает для меня.