如何在JavaScript中触发个人事件

z31licg0  于 2023-04-10  发布在  Java
关注(0)|答案(6)|浏览(119)

我不能在IE中使用JavaScript触发个人事件。在Firefox中工作得很好。
我的代码是:

var evento; 
if(document.createEventObject)  
{  
   evento = document.createEventObject();  
   document.fireEvent('eventoPersonal', evento);     
}  
//FF  
else  
{  
    evento = document.createEvent('Events');  
    evento.initEvent('eventoPersonal',true,false);  
    document.dispatchEvent(evento);  
}

但是在IE中尝试执行document.fireEvent('eventoPersonal', evento);时,无法正常工作。如何在IE中触发NO自定义事件?
在Internet Explorer中,出现错误:执行document.fireEvent('eventoPersonal', evento);的行中的“无效参数”

8yoxcaq7

8yoxcaq71#

Dean Edward's介绍了如何在IE中触发cutsom事件
http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/
它在文章的底部附近

var currentHandler;

if (document.addEventListener) {

  // We've seen this code already

} else if (document.attachEvent) { // MSIE

  document.documentElement.fakeEvents = 0; // an expando property

  document.documentElement.attachEvent("onpropertychange", function(event) {
    if (event.propertyName == "fakeEvents") {
      // execute the callback
      currentHandler();
    }
  });

  dispatchFakeEvent = function(handler) {
    // fire the propertychange event
    document.documentElement.fakeEvents++;
  };
}
0sgqnhkj

0sgqnhkj2#

我认为答案是-在IE中,您不能**触发不在此列表中的事件:
MSDN - DHTML Events
据我所知,框架存储了一个“自定义”事件名称的注册表,您必须使用它们的实现特定的 triggerhandle 函数来处理自定义事件,例如,prototype使用ondatavailable事件在后台传递它们的自定义事件。

4urapxun

4urapxun3#

你可能需要考虑使用一个库来抽象它。原型和jquery都可以为你处理这个问题。Jquery特别擅长让你用非常简单的代码创建一个事件。
Jquery的文档可以在这里找到:http://docs.jquery.com/Events

fzsnzjdm

fzsnzjdm4#

在IE11文档中.dispatchEvent仍然不起作用,但是现在attachEvent也丢失了,所以另一个解决方案也不起作用。然而,我想出了一个更糟糕的解决方案。:)它涉及到替换addEventListener方法,并如下所示:

var oldEventListener = document.addEventListener;

document.addEventListener = function (event, func, capture) {
    if (event == "MyPreciousCustomEvent") {
        document.MyPreciousCustomEvent = func;
    }

    oldEventListener.call(document, event, func, capture);
};

...

$(function () {
    try {
        document.MyPreciousCustomEvent("MyPreciousCustomEvent", {});
    } catch (e) {}
});

希望这对某人有帮助。

cvxl0en2

cvxl0en25#

当我阅读有关createEventObject方法的MSDN文章页面时,它似乎不是用于创建自定义事件-它是用于创建可以传递给现有事件的自定义对象。

说明:生成一个event对象,以便在使用fireEvent方法时传递事件上下文信息。

http://msdn.microsoft.com/en-us/library/ms536390%28VS.85%29.aspx

更新:您收到“invalid arguments”错误,因为“eventoPersonal”不是可接受的触发事件。

5anewei6

5anewei66#

是的,参考@Don Albrecht,你可以在http://api.jquery.com/trigger/上使用jquery trigger()方法

相关问题