В IE я могу просто вызвать element.click() из JavaScript - как мне выполнить ту же задачу в Firefox? В идеале я хотел бы иметь JavaScript, который будет одинаково хорошо работать в кросс-браузере, но при необходимости у меня будет другой JavaScript для каждого браузера.
Как я программным образом нажимаю на элемент в JavaScript?
Ответ 1
В документации document.createEvent
говорится: " Метод createEvent устарел. Используйте вместо."
Поэтому вы должны использовать этот метод:
var clickEvent = new MouseEvent("click", {
"view": window,
"bubbles": true,
"cancelable": false
});
и запустите его в следующем элементе:
element.dispatchEvent(clickEvent);
как показано здесь.
Ответ 2
Для ссылок 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;
}
}
Ответ 3
Используя jQuery, вы можете сделать то же самое, например:
$("a").click();
Что будет "click" всех якорей на странице.
Ответ 4
element.click() - стандартный метод, описанный спецификацией W3C DOM. Mozilla Gecko/Firefox следует стандарту и позволяет только этот метод вызываться на элементах INPUT.
Ответ 5
Вы пытаетесь фактически следовать ссылке или запускать onclick? Вы можете вызвать onclick с чем-то вроде этого:
var link = document.getElementById(linkId);
link.onclick.call(link);
Ответ 6
Здесь работает функция перекрестного браузера (для других, кроме обработчиков кликов):
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);
}
}
Ответ 7
Я использовал функцию KooiInc, перечисленную выше, но мне пришлось использовать два разных типа ввода: один 'button' для IE и один 'submit' для 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);
}
У меня есть поиск и пробовал много предложений, но это то, что закончилось тем, что работало. Если бы у меня было больше времени, мне бы хотелось исследовать, зачем отправлять работы с FF и кнопкой с IE, но это будет роскошью прямо сейчас, поэтому к следующей проблеме.