精通JavaScriptDOM事件

事件(上)(不好意思,又是标题党)JavaScript事件列表事件解说一般事件onclick鼠标点击时触发此事件ondblclick鼠标双击时触发此事件onmousedown按下鼠标时触发此事件onmouseup鼠标按下后松开鼠标时触发此事件onmouseover当鼠标移动到某对象范围的上方时触发此事件onmousemove鼠标移动时触发此事件onmouseout当鼠标离开某对象范围时触发此事件onkeypress当键盘上的某个键被按下并且释放时触发此事件.onkeydown当键盘上某个按键被按下时触发此事件onkeyup当键盘上某个按键被按放开时触发此事件页面相关事件onabort图片在下载时被用户中断onbeforeunload当前页面的内容将要被改变时触发此事件onerror出现错误时触发此事件onload页面内容完成时触发此事件onmove浏览器的窗口被移动时触发此事件onresize当浏览器的窗口大小被改变时触发此事件onscroll浏览器的滚动条位置发生变化时触发此事件onstop浏览器的停止按钮被按下时触发此事件或者正在下载的文件被中断oncontextmenu当弹出右键上下文菜单时发生onunload当前页面将被改变时触发此事件表单相关事件onblur当前元素失去焦点时触发此事件onchange当前元素失去焦点并且元素的内容发生改变而触发此事件onfocus当某个元素获得焦点时触发此事件onreset当表单中RESET的属性被激发时触发此事件onsubmit一个表单被递交时触发此事件了解上面的事件如此简单,那么事件还有什么可讲的呢?问题一:每个事件只能注册一个函数Js代码1.varoDiv=document.getElementById("oDiv");2.oDiv.onclick=fn1;3.oDiv.onclick=fn2;4.functionfn1(){alert("我被覆盖了!")}5.functionfn2(){alert("只有我被执行到!")}解决方案一:Js代码1.obj.onclick=function(){2.fn1();3.fn2();4.fn3();5.};缺陷一:需要将所有函数一次添加进去,不能在运行时添加缺陷二:在事件处理函数中this将指向window,而不是obj解决方案二:Js代码1.functionaddEvent(fn,evtype,obj){2.//obj是要添加事件的HTML元素对象3.//evtype是事件名字,不包含on前缀,因为每个都有on,所以写个on是多余的4.//fn是事件处理函数5.varoldFn;6.if(obj["on"+evtype]instanceofFunction){7.oldFn=obj["on"+evtype];//当添加函数时,如果已注册过了,则将其保存起来8.}9.obj["on"+evtype]=function(){10.if(oldFn){11.oldFn.call(this);12.}13.fn.call(this);//使用call方法,使事件处理函数中的this仍指向obj14.};15.}这样已经解决了问题,但如何删除事件呢?如果直接将对象的onevtype这类的属性赋值为null将会删除所有的事件处理函数!解决方案二的修改版:先将事件存储起来,存储在对象的__EventHandles属性里面Js代码1.eventHandlesCounter=1;//计数器,将统计所有添加进去的函数的个数,0位预留作其它用2.functionaddEvent(fn,evtype,obj){3.if(!fn.__EventID){//__EventID是给函数加的一个标识,见下面给函数添加标识的部分4.fn.__EventID=eventHandlesCounter++;5.//使用一个自动增长的计数器作为函数的标识以保证不会重复6.}7.if(!obj.__EventHandles){8.obj.__EventHandles=[];//当不存在,也就是第一次执行时,创建一个,并且是数组9.}10.if(!obj.__EventHandles[evtype]){//将所有事件处理函数按事件类型分类存放11.obj.__EventHandles[evtype]={};//当不存在时也创建一个散列表12.if(obj["on"+evtype]instanceofFunction){13.//查看是否已经注册过其它函数14.//如果已经注册过,则将以前的事件处理函数添加到下标为0的预留的位置15.obj.__EventHandles[evtype][0]=obj["on"+evtype];16.obj["on"+evtype]=handleEvents;//使用handleEvents集中处理所有的函数17.}18.}19.obj.__EventHandles[evtype][fn.__EventID]=fn;20.//如果函数是第一次注册为事件处理函数,那么它将被添加到表中,函数的标识作为下标21.//如果函数已经注册过相同对象的相同事件了,那么将覆盖原来的而不会被添加两次22.functionhandleEvents(){23.varfns=obj.__EventHandles[evtype];24.for(variinfns){25.fns[i].call(this);26.}27.}28.}使用上面的函数已经可以在一个对象添加多个事件处理函数,在函数内部this关键字也指向...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?