Имитация клика в jQuery / JavaScript по ссылке - PullRequest
52 голосов
/ 03 декабря 2009

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

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

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

РЕДАКТИРОВАТЬ: с помощью ответов ниже, похоже, что можно проверить для обработчиков событий, подключенных с помощью jQuery или с помощью атрибута onclick. Как проверить обработчики событий, подключенные с помощью addEventListener / любой другой библиотеки JS, чтобы она была надежной?

Ответы [ 7 ]

46 голосов
/ 03 декабря 2009

Вы можете использовать функцию click , чтобы вызвать событие щелчка на выбранном элементе.

Пример:

$( 'selector for your link' ).click ();

Вы можете узнать о различных селекторах в документации jQuery .

РЕДАКТИРОВАТЬ: как сказали ниже комментаторы; это работает только для событий, связанных с jQuery, inline или в стиле "element.onclick". Он не работает с addEventListener и не будет переходить по ссылке, если не определены обработчики событий. Вы можете решить это следующим образом:

var linkEl = $( 'link selector' );
if ( linkEl.attr ( 'onclick' ) === undefined ) {
    document.location = linkEl.attr ( 'href' );
} else {
    linkEl.click ();
}

Не знаю, как насчет addEventListener.

39 голосов
/ 26 марта 2013

Почему бы не просто хороший старый javascript?

$('#element')[0].click()

29 голосов
/ 03 декабря 2009

Просто

$("#your_item").trigger("click");

С помощью .trigger () вы можете моделировать многие типы событий, просто передавая их в качестве параметра.

8 голосов
/ 03 декабря 2009

Легко! Просто используйте функцию jQuery click :

$("#theElement").click();
7 голосов
/ 06 февраля 2013

Попробуйте это

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");
1 голос
/ 03 декабря 2009

Сначала посмотрите этот вопрос , чтобы узнать, как можно найти, если ссылке назначен обработчик jQuery.

Следующее использование:

$("a").attr("onclick")

чтобы узнать, назначено ли ему событие javascript.

Если что-то из перечисленного верно, то вызвать метод click. Если нет, то получите ссылку:

$("a").attr("href")

и следуйте за ним.

Боюсь, я не знаю, что делать, если addEventListener используется для добавления обработчика событий. Если вы отвечаете за источник полной страницы, используйте только обработчики событий jQuery.

0 голосов
/ 16 ноября 2010

Все это может не помочь, если вы используете кнопку удаленной формы rails для имитации нажатия на. Я попытался перенести хорошее моделирование событий из прототипа здесь: мои фрагменты . Просто сделал это, и это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...