在IE中,我可以从JavaScript调用element.click() - 如何在Firefox中完成相同的任务?理想情况下,我希望有一些JavaScript可以跨浏览器同样运行,但如果有必要,我会为此提供不同的每浏览器JavaScript。
答案 0 :(得分:65)
document.createEvent
documentation表示" createEvent 方法已弃用。请改用event constructors。"
所以你应该使用这种方法:
var clickEvent = new MouseEvent("click", {
"view": window,
"bubbles": true,
"cancelable": false
});
并在像这样的元素上触发它:
element.dispatchEvent(clickEvent);
如图所示here。
答案 1 :(得分:30)
对于firefox链接似乎是“特殊”。我能够使这个工作的唯一方法是使用createEvent described here on 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;
}
}
答案 2 :(得分:21)
答案 3 :(得分:10)
element.click()是W3C DOM specification概述的标准方法。 Mozilla的Gecko / Firefox follows the standard只允许在INPUT元素上调用此方法。
答案 4 :(得分:8)
您是否尝试实际关注链接或触发onclick?您可以使用以下内容触发onclick:
var link = document.getElementById(linkId);
link.onclick.call(link);
答案 5 :(得分:7)
这是一个跨浏览器工作函数(也可用于点击处理程序以外):
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);
}
}
答案 6 :(得分:1)
我使用了上面列出的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);
}
我有搜索并尝试了很多建议,但这最终起作用了。如果我有更多的时间,我会想调查为什么提交与FF和按钮与IE一起使用,但这将是一个奢侈品现在,以便下一个问题。