javascript添加侦听器和删除监视器使用详细说明

javascript添加侦听器和删除监视器使用详细说明
本文演示了Javascript添加侦听器和删除监视器的用法,供大家参考,具体分析如下:

在JS事件侦听器调用addEventListener绑定事件的使用。这种用法在jQuery中很常见,也很简单,但它在原始js中更为复杂。在这里,我们整理了测试方法和调用addEventListener事件的例子,供大家参考。

在前两天,当听到播放器被添加时,删除和监视有很多麻烦。检查后,发现参数必须完全相同。什么是完全对应

复制代码代码如下:$('视频'){ 0 }。addEventListener('timeupdate ',currenttimehandler,真的);

这句话,例如,需要引入三个参数,以便它可以被删除,为什么必须这样,是的,那里的鸡蛋的痛苦在这里:

在添加和删除时,不能写入第三个参数,但在这一点上它们的默认值不同!

一般来说,注册侦听器是假的…

1。添加自定义事件监听

复制下面的代码:VAR eventhandlescounter = 1; / /统计人数的添加事件监测,0作为预留

函数AddEvent(obj,EVT,FN){

如果(!FN。__eventid){ FN。__eventid = eventhandlescounter ++;}

如果(!obj。__eventhandles){ obj。__eventhandles = {};}

如果(!obj。__eventhandles { EVT }){

obj。__eventhandles { EVT } = { };

如果(obj { + EVT }是{功能

obj。__eventhandles { EVT } { 0 } = { 目标+ EVT };

obj { + EVT } = handleevents;

}

}

obj。__eventhandles { EVT } { } = __eventid FN FN;
功能handleevents(){

VaR FNS = obj。__eventhandles EVT } {;

对于(var i = 0;i < fns.length;i++)

FNS {我}调用(这);

}

}

2、自定义删除事件监视器

复制代码代码如下:功能delevent(obj,EVT,FN){

如果(obj。__eventhandles OBJ。__eventhandles { } | | | | EVT!!!FN。__eventid){

返回false;

}

如果(obj。__eventhandles { EVT } { } = = __eventid FN,FN){

删除对象。__eventhandles { } { } __eventid EVT FN;

}

}

三.修改以上方法

复制代码代码如下:函数AddEvent(obj,EVT,FN,useCapture){

如果(obj。addEventListener){ / /优先W3C事件注册

Obj.addEventListener(EVT,FN,!useCapture);

其他{ }

如果(!FN。__eventid){ FN。__eventid = AddEvent。__eventhandlescounter ++;}

如果(!obj。__eventhandles){ obj。__eventhandles = {};}

如果(!obj。__eventhandles { EVT }){

obj。__eventhandles { EVT } = { };

如果(obj { + EVT }){

(obj。__eventhandles { evtype } { 0 } = { 目标+ evtype })。__eventid = 0;

}

obj { + evtype } = addevent.execeventhandles;

}

}

}

__eventhandlescounter AddEvent = 1;

addevent.execeventhandles =功能(EVT){

如果(!这个__eventhandles){ return true;}

极值理论EVT window.event | | =;

VaR FNS =这。__eventhandles { EVT型};

对于(var i = 0;i < fns.length;i++){

如果(FNS {我}是{功能)

FNS {我}调用(这);

}

}

};

功能delevent(obj,EVT,FN,useCapture){

如果(obj。removeEventListener){ / /第一次使用W3C方法移除事件处理程序

Obj.removeEventListener(EVT,FN,!useCapture);

{ }人

如果(obj。__eventhandles){

VaR FNS = obj。__eventhandles EVT } {;

如果(FNS){删除FNS { FN。__eventid };}

}

}

4。标准化的事件对象

复制代码代码如下:功能fixevent(EVT){

如果(!EVT。目标){

evt.target = evt.srcelement;

preventDefault = fixevent.preventdefault EVT;

evt.stoppropagation = fixevent.stoppropagation;

如果(evt.type = = mouseover){

evt.relatedtarget = evt.fromelement;

} else if(evt.type = = mouseout){

evt.relatedtarget = evt.toelement;

}

(evt.charcode = evt.type = =按键)EVT。密码:0;

evt.eventphase = 2;

evt.timestamp =(新的日期()GetTime());

}

返回值;

}

fixevent。preventDefault =函数(){ }。值= false;

fixevent。里面=函数(){ this.cancelbubble = true;};

的fixevent功能不是单独完成的,它必须有一个事件对象的参数,它是只有当事件发生时!最好的办法是将其纳入AddEvent功能execeventhandles。

复制代码如下:addevent.execeventhandles =功能(EVT)事件处理程序{ / /遍历所有的执行

如果(!这个__eventhandles){ return true;}

极值理论(EVT | = fixevent |窗口。事件); / /标准化操作在这里

VaR FNS =这。__eventhandles { EVT型};

对于(var i = 0;i < fns.length;i++){

如果(FNS {我}是{功能)

Fns{i}.call (this, EVT); / / and use it as the first parameter event handling function

在事件处理程序内部可以使用事件对象}的统一方法;

这是一些由大师编写的实用侦听器的一个例子。

复制代码代码如下所示:
test6.html
函数测试(){

Window.alert(你投一次);

document.getelementbyid(1 )DetachEvent(onclick。

}


document.getelementbyid(1 )AttachEvent(onclick。

的document.getelementbyid(1 )AttachEvent(onclick。

document.getelementbyid(1 )DetachEvent(onclick。

下面显示一个监控键盘事件的时间,判断输入是否是一个数字,如果没有直接提示数字,然后拒绝输入。

复制代码代码如下所示:
test7.html
函数测试(事件){

每个用户按一个键,判断不是数字的。

如果(的情况下57){

Window.alert(你不输入号码);

返回false;

}

}

请输入一个数字
这里的事件是一个事件对象,他可以返回很多信息,具体参考相关文档
补充:事件监控的兼容性

1。即使用attachevent / detachevent方法添加和删除事件侦听器;W3C使用addEventListener和removeEventListener方法。

2。即使用事件命名的事件,和W3C是事件的名称。

3。IE事件侦听器使用全局事件对象,而W3C将事件对象作为参数传递给侦听器。

4,为了避免触发事件的默认行为,IE的方法是需要程序员设置事件对象的ReturnValue属性值为假,而W3C是执行preventDefault方法。

5。IE不提供对事件捕获阶段的支持

6。为了阻止事件的经过,IE的方法是为事件对象是真的把cancelbubble,和W3C建立执行里面的方法。

7。IE事件侦听器作为一个独立的函数来调用W3C,它作为调用方法的对象,这意味着伊江事件监听器中的这个关键字不是一个无用的全局对象(窗口)。

8。IE在使用事件侦听器时存在内存泄漏。在伊江浏览器中,如果要为元素创建事件侦听器并在侦听器中使用此元素,则在用户进入其他页面之前,侦听器和相关DOM节点所占用的内存空间不会被释放。

希望本文能对大家的javascript程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部