如何把多个js函数绑定到事件上面
2017-12-29 11:59
489 查看
为什么需要绑定事件和多个事件
在给网页加一些特效时,经常要加入“onload”事件,即在网页加载完后执行某事件,例如:<body onload=”alert(‘欢迎光临!’)”,但这样做有个大的缺陷,事件会在网页完全下载完后才会执行,包括网页中的静态资源(图片或Flash等),如果网页中的图片比较大或有很多图,可能还没等网页完全下载完网友已经点击链接到其它网页去了,这样这个事件就没有执行了。
这时我们会想到用“window.onload”或“document.body.onload”来替换
<body>中的onload事件,的确问题解决了,但在
加载多个onload事件时或控制加裁顺序时还会出现一些问题,还有一个问题就是当使用window.onload时,后面的赋值可能会将前面的覆盖掉,导致前面的绑定方法不能够运行,直到我发现“Paul Koch”写的addLoadEvent()函数后,所有问题都解决了。在这篇文章里,我们将会详细说明该方法并进行自己的延伸使用。
1.事件和方法的区别
事件:指的是一个类有可能会引发的一个调用,任何类都可以向一个有事件的类注册这个事件的监听,那么当事件引发时,类就会受到事件通知,从而响应。在javascript中,所有的事件都是通过函数来执行的,函数本身即是动作(针对事件来说),也是方法(针对对象来说)!对象是指的谁触发了事件,绑定事件的主谋。
事件就如神经开关,刺激激发动作函数,只需交互一瞬间; 比方:“针刺皮肤,神经刺激敏感”就是一个事件。
方法:指的是一个类的一些操作,比如一个Car类他有一个Move的移动方法,表示这个车子可以移动的操作(Operation)。函数方法就是对事件作出具体反馈映射,即执行处理某种事件的动作,需要一段执行过程。比方:“针刺皮肤,激发反馈,立刻躲闪”躲闪动作就是函数方法。
故,所有的函数动作本身都是静态的,不会自我运行,必须借用外力即事件刺激激活调用才可运行。
即,函数动作必须与事件绑定才有意义,函数与事件二者是息息相关,相依为命的,才能称之为完整是动作。
总,函数动作必须有事件激发调用。
对于BOM对象可有方法和事件,其区别在于:
1.事件名前一般都以on开头。 2.方法是程序员写语句直接调用,即显式调用;事件不需程序员调用,但是,必须由程序员写一个函数且将该函数赋值给相应的事件,其调用是在相应的事件触发时。
2. 将方法绑定到事件上
假如我们希望某个函数在网页加载完毕之后就立即执行。网页加载完毕时会触发一个onload事件,所以我们可以利用onload事件来加载这个函数。Onload事件与window对象相关联。2.1 js中最常使用的绑定
把myfunction函数绑定到这个事件上:
window.onload = myfunction();
如上面所示,一个函数我们可以利用上面的解决,那两个、三个甚至更多呢?怎么解决??
2.2如何实现多个方法的绑定
假如我们有firstFunction和secondFunction两个函数,是不是就是下面这样写呢:
window.onload = firstFunction; window.onload = secondFunction;
但是每个处理函数只能绑定一条指令。所以上面所说名的代码不能实现我们的思路。因为secondFunction函数将会取代firstFunction函数。
有一种办法可以帮助我们解决上面问题:即我们先创建一个匿名函数来容纳这两个函数,然后把那个匿名函数绑定到onload事件上,如下:
window.onload = function(){ firstFunction(); secondFunction(); }
这确实是一个好的、简答的能解决简单问题的方法。
但是其实还存在问题,那就是我们可能不是静态的去加载这些函数,也不能确定这些函数什么时候添加,那么就可以看看下面的这个解决方案——不管你打算在页面加载完毕后要执行多少个函数,利用该函数都可以轻松的实现。
该函数名为addLoadEvent。该函数仅一个参数:该参数指定了你打算在页面加载完毕后需要执行的函数的函数名。
addLoadEvent()函数代码如下:
function addLoadEvent(func){ var oldonLoad = window.onload; if(typeof window.onload!='function'){ window.onload = func; } else{ // window.onload是一个对象,进行添加匿名方法 window.onload = function(){ oldonload(); //执行之前的onload方法 func(); //执行当前添加的onload } } }
addLoadEvent函数主要是完成如下的操作:
1、把现有的window.onload事件处理函数的值存入到oldonload中。 2、如果在这个处理函数上还没有绑定任何函数,就将该函数添加给它。 3、如果在这个处理函数上已经绑定了一些函数,就把该函数追加到现有指定的末尾。
通过addLoadEvent函数,只需要调用该函数就可以进行绑定了。如下面所示代码:
addLoadEvent(firestFunction); addLoadEvent(secondFunction);
所以这个函数非常有用,尤其当代码变得很复杂的时候。无论你打算在页面加载完毕时执行多少个函数,只需要多写几条这样的语句就可以解决了。方便、实用。
2.3如何对其他事件进行绑定
从上面结果我们能够得出,当我们需要对其他事件进行绑定方法时,可以采用同样的原理进行绑定,如下面代码,我们进行onresize事件方法的绑定:
function addOnresize(func) { //func是要添加的方法 var oldOnResize = window.onresize; //window事件对象 if (typeof window.onresize !== 'function') { //判断是否是一个方法,在这里要说明的是window.onresize在赋值之前是一个object,赋值方法之后是一个function window.onresize = func; //如果不是方法就给对象赋值 } else { window.onresize = function () { oldOnResize(); //调用上一次状态的方法 func(); // 调用新增的方法 } } }
如上面代码,我们能够这种模式进行添加任意方法,然后在其他地方使用,也就是说当我们使用时并不会将其他地方绑定的方法覆盖掉,而是先调用其他地方的方法,然后再调用自己添加的方法。
3. Js window 常用事件 event
//事件加载完后立即发生window.onload = function onLoad() { alert("onload"); }
//用户退出页面时发生,事件在用户退出页面时发生。
window.onunload = function onUnLoad() { alert("onunload"); }
//刷新或关闭时调用
window.onbeforeunload = function onBeforeUnLoad() { alert("onbeforeunload"); }
//是判断当前页面是否活动
window.onactivate = function onActivate() { alert("onactivate"); }
//
window.onbeforedeactivate = function onBeforeDeactivate() { alert("onbeforedeactivate"); }
//ctrl+滚动时触发
window.oncontrolselect = function onControlSelect() { alert("oncontrolselect"); }
//滚动
window.onscroll = function onScroll() { alert("onscroll"); }
window.onresizestart = function onResizeStart() { alert("onresizestart"); } // window.onresizeend = function onResizeEnd() { alert("onresizeed"); }//
//控件有效/无效 document.forms[0].controlName.disabled=false/true;
–end–
相关文章推荐
- 兼容IE9以下和非IE浏览器的原生js事件绑定函数
- js中三种事件绑定之间的关系和事件处理函数里的this值
- 【js学习之路】事件绑定函数中,将this换成调用对象导致的问题
- 如何最快速的找到页面某一元素所绑定的点击事件,并查看js代码
- js立即执行函数应用--事件绑定
- 兼容IE9以下和非IE浏览器的原生js事件绑定函数
- js_前台页面如何设置radio、checkbox、select三者的值以及绑定事件,方便后台接收数据
- js 函数定义的两种方式以及事件绑定(扫盲)
- Javascript调试的小窍门: 如何获取元素上的事件绑定函数?
- js 事件绑定函数与this的使用
- ...后台代码中如何调用 javascript 函数的问题! - ASP.NET专题(按钮事件中调用JS文件中函数)
- 如何用vue 语法 给html元素绑定原生js DOM 事件
- 将多个js函数绑定到onload事件上
- ...后台代码中如何调用 javascript 函数的问题! - ASP.NET专题(按钮事件中调用JS文件中函数)
- 如何做到js绑定事件的同时不执行事件
- Js事件绑定时,函数名加括号和不加括号有什么区别
- js函数绑定同时,如何保留代码执行环境?
- js实现兼容性事件绑定函数
- 兼容浏览器的js事件绑定函数(详解)
- jQuery -- 如何为动态添加的元素绑定事件处理函数