Как программно нажать на элемент в JavaScript? - PullRequest
56 голосов
/ 01 мая 2009

В IE я могу просто вызвать element.click () из JavaScript - как мне выполнить ту же задачу в Firefox? В идеале я хотел бы иметь некоторый JavaScript, который одинаково хорошо работал бы в разных браузерах, но при необходимости у меня будет другой JavaScript для каждого браузера.

Ответы [ 7 ]

67 голосов
/ 18 марта 2014

В документации document.createEvent говорится, что " Метод createEvent устарел. Вместо этого используйте конструкторы событий . "

Так что вы должны использовать этот метод вместо:

var clickEvent = new MouseEvent("click", {
    "view": window,
    "bubbles": true,
    "cancelable": false
});

и выстрелить по такому элементу:

element.dispatchEvent(clickEvent);

как показано здесь .

30 голосов
/ 01 мая 2009

Для Firefox ссылки выглядят как «специальные». Единственный способ получить эту работу - использовать описанный здесь createEvent для MDN и вызвать функцию initMouseEvent. Даже если это не сработало полностью, мне пришлось вручную указать браузеру открыть ссылку ...

var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);

while (element)
{
    if (element.tagName == "A" && element.href != "")
    {
        if (element.target == "_blank") { window.open(element.href, element.target); }
        else { document.location = element.href; }
        element = null;
    }
    else
    {
        element = element.parentElement;
    }
}
21 голосов
/ 01 мая 2009

Используя jQuery , вы можете сделать то же самое, например:

$("a").click();

Который будет "щелкать" по всем якорям на странице.

10 голосов
/ 01 мая 2009

element.click () - это стандартный метод, описанный в спецификации W3C DOM . Gecko / Firefox * в Mozilla соответствует стандарту и позволяет вызывать этот метод только для элементов INPUT.

8 голосов
/ 01 мая 2009

Вы пытаетесь фактически перейти по ссылке или вызвать onclick? Вы можете вызвать щелчок мышью примерно так:

var link = document.getElementById(linkId);
link.onclick.call(link);
7 голосов
/ 01 мая 2009

Вот кросс-браузерная рабочая функция (может использоваться и для других обработчиков кликов):

function eventFire(el, etype){
    if (el.fireEvent) {
      el.fireEvent('on' + etype);
    } else {
      var evObj = document.createEvent('Events');
      evObj.initEvent(etype, true, false);
      el.dispatchEvent(evObj);
    }
}
1 голос
/ 20 февраля 2013

Я использовал функцию KooiInc, указанную выше, но мне пришлось использовать два разных типа ввода: одна «кнопка» для IE и одна «отправить» для FireFox. Я не совсем уверен, почему, но это работает.

// HTML

<input type="button" id="btnEmailHidden" style="display:none" />
<input type="submit" id="btnEmailHidden2" style="display:none" />

// в JavaScript

var hiddenBtn = document.getElementById("btnEmailHidden");

if (hiddenBtn.fireEvent) {
    hiddenBtn.fireEvent('onclick');
    hiddenBtn[eType]();
}
else {
    // dispatch for firefox + others
    var evObj = document.createEvent('MouseEvent');
    evObj.initEvent(eType, true, true);
    var hiddenBtn2 = document.getElementById("btnEmailHidden2");
    hiddenBtn2.dispatchEvent(evObj);
}

Я искал и перепробовал много предложений, но это то, что сработало. Если бы у меня было больше времени, я бы хотел выяснить, почему submit работает с FF и кнопкой с IE, но сейчас это было бы роскошью, так что переходите к следующей проблеме.

...