我如何以编程方式点击JavaScript中的元素?
在IE中,我可以从JavaScript调用element.click() – 如何在Firefox中完成相同的任务? 理想情况下,我希望有一些JavaScript可以跨浏览器工作,但是如果需要的话,我会为此使用不同的浏览器JavaScript。
document.createEvent
文档说“ 不推荐使用createEvent方法,而是使用事件构造函数 ”。
所以你应该使用这个方法:
var clickEvent = new MouseEvent("click", { "view": window, "bubbles": true, "cancelable": false });
并在这样的元素上开火:
element.dispatchEvent(clickEvent);
如下所示。
对于Firefox的链接似乎是“特殊的”。 我能够得到这个工作的唯一方法是使用MDN中描述的createEvent并调用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; } }
使用jQuery你可以做同样的事情,例如:
$("a").click();
这将“点击”页面上的所有锚点。
element.click()是W3C DOM规范概述的标准方法。 Mozilla的Gecko / Firefox 遵循标准 ,只允许在INPUT元素上调用此方法。
你是否试图按照链接或触发onclick? 你可以触发一个像这样的onclick:
var link = document.getElementById(linkId); link.onclick.call(link);
这是一个跨浏览器的工作function(可用于除点击处理程序以外):
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); } }
我使用了上面列出的KooiInc函数,但是我必须使用两个不同的inputtypes,一个是“button”,另一个是“提交”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); }
我有search,并尝试了很多build议,但这是结束了工作。 如果我有更多的时间,我会喜欢调查为什么提交工程与FF和button与IE浏览器,但这将是一个豪华的权利,现在到下一个问题。