1

这是一个简单的场景,click 事件在 Firefox 中运行良好,但在 IE 中运行良好。让我们详细介绍一下。我有一个如下所示的按钮:

<h:form id="theForm">
  <h:commandLink id="theButton" styleClass="button" action="#{theBean.doWork}"/>
</h:form>

当我尝试从 JavaScript 调用按钮的单击事件时,如下所示:

document.getElementById('theForm:theButton').click();

根据这个线程,我需要像这样将代码放在下面:

<script language="javascript" type="text/javascript">
  HTMLElement.prototype.click = function() {
    var evt = this.ownerDocument.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
    this.dispatchEvent(evt);
  }

但是当我在我的 JavaScript 中有这段代码时,它确实可以在 Firefox 中运行,但不再适用于 IE。我可以知道如何使它在 IE 和 Firefox 上都可以工作吗?

4

3 回答 3

2

尝试:

if(!HTMLElement){
var HTMLElement = Element;
}
HTMLElement.prototype.click = function() {
    var evt = this.ownerDocument.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
    this.dispatchEvent(evt);
}

这应该适用于 IE>=8,它用于Element提供与HTMLElement其他浏览器相同的界面。

于 2012-11-03T05:55:17.553 回答
0

您可以使用 jQuery 进行尝试:

$("#theButton").click(function() {alert("Handler for .click() called.");}); 
于 2012-11-03T06:00:40.190 回答
0

错过分号 - IE 不是那样的

<script language="javascript" type="text/javascript">
  HTMLElement.prototype.click = function() {
    var evt = this.ownerDocument.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
    this.dispatchEvent(evt);
  };

是的,一定要修补 HTMLElement

var HTMLElement =HTMLElement===undefined?Element:HTMLElement;

于 2012-11-03T06:01:56.240 回答