本文演示了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程序设计有所帮助。