JS 关于事件处理程序机制

关于这个问题,自己也做了一下测试,算了,直接粘贴代码吧,若有问题,欢迎指出!

<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title>JS DOM2事件处理程序</title></head><body>    <input id="btn" type="button" value="Click Me!"/>    <input id="btn1" type="button" value="Click Me!"/>    <input id="btn2" type="button" value="Click Me!"/>    <input id="btn3" type="button" value="Click Me!"/>    <input id="btn4" type="button" value="Click Me!"/>    <script>        // DOM2事件处理程序        //通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;移除时传入的参数与添加处理程序的参数相同;这也意味着通过addEventListener()添加的匿名函数将无法移除;        var btn = document.getElementById(‘btn‘);        btn.addEventListener(‘click‘,function(){            alert(this.id);        },false);        btn.removeEventListener(‘click‘,function(){   // 此参数实际不同,因此没有效果!!!!!!!!            alert(this.id);        },false);

        //以上第二个参数是完全不同的函数,改为下面即可:        var btn1= document.getElementById(‘btn1‘);        var handler = function(){            alert(this.id);        };        btn1.addEventListener(‘click‘,handler,false) ;        btn1.removeEventListener(‘click‘,handler,false);    //  这样就有效了!

        // IE事件处理机制        //IE实现了与DOM中类似的两个方法:attachEvent()和detachEvent()。这两个方法接收相同的参数        var btn2 = document.getElementById(‘btn2‘);        btn2.attachEvent(‘onclick‘,function(){            alert("Clicked!")        });

        // 注意:attachEvent()的第一个参数是“onclick”;在使用attachEvent()方法的情况下,时间处理程序会在全局作用域中运行,因此this 等于 window。        var btn3 = document.getElementById(‘btn3‘);        btn3.attachEvent(‘onclick‘,function(){            alert(this === window);         //true        });

        // 那么重点来了:与addEventListner()类似,attachEvent()方法也可以用来为一个元素添加多个事件处理程序        var btn4 = document.getElementById(‘btn4‘);        btn4.attachEvent(‘onclick‘,function(){            alert(‘Clicked!‘);        });        btn4.attachEvent(‘onclick‘,function(){            alert(‘Hello World!‘)        });        // 但是,针对IE8,与DOM方法不同的是,这些事件处理程序不是以添加它们的顺序执行,而是以相反的顺序被触发。单击这个按钮,首先会看到“Hello World!”,然后才是“Clicked!”;IE8+以上就和DOM方法执行顺序一样;

        //使用attachEvent()添加的事件可以通过detachEvent()来移除,前提是参数得一致,如同DOM方法一样;

    </script>

</body></html>

总之,像这方面的东西,还是需要自己多多测试,多多研究!推荐大家看看<JS高级程序设计>;
总之,像这方面的东西,还是需要自己多多测试,多多研究!推荐大家看看<JS高级程序设计>;
总之,像这方面的东西,还是需要自己多多测试,多多研究!推荐大家看看<JS高级程序设计>;

				
时间: 2024-08-01 15:19:59

JS 关于事件处理程序机制的相关文章

浅谈js的事件冒泡机制

很多人都听说过,js的事件冒泡机制,其实,这个说法还是比较生动形象的,就是一个水泡在水底下,冒泡到水面的过程. 那js的事件冒泡机制呢,就是一个DOM树,一级一级向上冒的过程,最终是到document这个根节点这里. 这里就有一个小细节,dom点击后,它所有的父级都会触发事件,每一级绑定的事件都会触发,这样是耗费事件和性能进行处理的,但是,如果我们把事件都绑定到document根节点,这样只需要在最后一级的时候,区别是那个dom触发的就行了,这个也叫事件委托. 其实这个场景适用于,子节点和众多父

JS JavaScript事件循环机制

区分进程和线程 进程是cpu资源分配的最小单位(系统会给它分配内存) 不同的进程之间是可以同学的,如管道.FIFO(命名管道).消息队列 一个进程里有单个或多个线程 浏览器是多进程的,因为系统给它的进程分配了资源(cpu.内存)(打开Chrome会有一个主进程,每打开一个Tab页就有一个独立的进程) 浏览器的渲染进程是多线程的 1.GUI渲染线程 2.JS引擎线程 3.事件触发线程 4.定时触发器线程 5.异步HTTP请求线程 事件循环机制 上图解释: 同步和异步任务分别进入不同的执行"场所&q

JS 的事件委托机制

以前写上图所示的鼠标点击触发事件,一般都是用如下所示的给每一个表示列表的标签绑定一个click事件(演示用的例子的框架是React): 毫无疑问,这样是比较繁琐的,以后维护修改改个函数名什么的还不方便(当然sublime还是有ctrl+d的么= =),水平提高一点的写法如下: 但是,实际上还是为每一个要触发点击的标签绑定了一个click事件,这就导致了"事件处理程序过多". 在JavaScript中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能.导致这一问题的原因是多方

js的事件处理程序

js事件处理程序一般有三种: 1.HTML事件处理程序 <body> <input type="button" value="点击" onclick="mes()" /> <!--js--> <script> function mes(){ document.write("hello world!"); } </script> </body> 这种事件方式

js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)

javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环中的同步任务,异步任务: 同步和异步任务在不同的执行"场所",同步的进入主线程,异步的进入Event Table执行并注册函数. 当指定的异步事情完成时,Event Table会将这个函数移入Event Queue. 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,推

JS:事件处理程序

在JQuery中有个toggle事件,可以绑定两个或多个函数,可以轮流相应click事件,这两天学习到原来javascript中有两个方法(也可以说是四个)同样可以实现这个功能. #box{ margin: 50px; width: 200px; height: 200px; } .blue{ background: blue; } .red{ background: red; } 1.W3C 下的事件处理: addEventListener() :用于处理指定的操作: removeEventL

js添加事件处理程序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>robot</title> <script> //添加事件处理程序 //传入三个参数分别为事件名称.处理程序.是否要让事件向上传递 window.addEventListener("load", init, false); f

js的事件委托机制

如今的JavaScript技术界里最火热的一项技术应该是'事件委托(event delegation)'了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们的父元素上.事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件.基本概念非常简单,但仍有很多人不理解事件委托的工作原理.这里我将要解释事件委托是如何工作的,并提供几个纯JavaScript的基本事件委托的例子. 假定我们有一个UL元素,它有几个子元素: <ul id="parent-l

JS的事件动态绑定机制

动态添加标签+动态添加事件 window.onload=function(){ (已存在元素节点)事件绑定: (未来元素节点)事件绑定: } 它会扫描元素节点,如果元素节点存在(静态写好的),就可以绑定了:如果元素节点不存在,是后来动态添加的就不会执行. 所以,我们不能将后来添加的元素的事件绑定像已存在元素节点的绑定一样,他的元素节点的添加要和事件绑定的代码放在一起. 代码实现:微博发布功能,微博最新发布的在上边,可以删除. <!DOCTYPE html> <html> <h