Подтвердить что ты не робот

Имитация щелчка в jQuery/JavaScript по ссылке

Я хочу имитировать щелчок по любой ссылке на странице с помощью JavaScript. Если у этой ссылки есть некоторая функция, привязанная к ее событию onclick (любым другим JS я не контролирую), тогда эту функцию нужно вызывать иначе, ссылка должна вести себя обычным образом и открывать новую страницу.

Я не уверен, что достаточно проверить значение обработчика onclick. Я хочу построить это так, чтобы он работал над любым элементом ссылки.

Я не могу контролировать, какая функция может быть привязана к событию onclick ссылки, используя любую библиотеку JS (не обязательно jQuery) или просто используя JavaScript.

EDIT: с помощью приведенных ниже ответов выглядит так, что можно проверить обработчики событий с помощью jQuery или с помощью атрибута onclick. Как проверить обработчики событий, прикрепленные с помощью addEventListener/любой другой библиотеки JS, чтобы она была надежной?

4b9b3361

Ответ 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 для имитации щелчка. Я попытался отобразить симпатичное симуляцию событий из прототипа здесь: мои фрагменты. Просто сделал это, и это работает для меня.