JavaScript 事件流、事件处理程序及事件对象总结

发布时间:2017-04-13 15:44 编辑:站点网
再看一个例子,下面代码中,stopPropagation()方法取消了事件的进一步捕获或冒泡。当我点击按钮时,本来应该会因为事件冒泡机制触发按钮和body元素上的点击事件处理程序,输出”From Bth …”和”From Body …”。现在点击事件在按钮元素上触发之后就被阻止继续在DOM层次中的传播,因此body上的事件处理程序不会被触发。var btn = document.getElementById("myBtn"); btn.onclick = function(event) { console.log("From Bth ..."); event.stopPropagation(); // 停止事件传播 }; document.body.onclick = function() { console.log("From Body ..."); };IE中的事件对象在IE中,使用DOM0的方法添加事件处理程序时,event对象作为window对象的一个属性存在。如果是通过attachEvent()方法添加,则event对象是作为参数传入事件处理函数。下面是代码示例:var btn = document.getElementById("myBtn"); btn.onclick = function() { var event = window.event; console.log(event.type); // "click" }; btn.attachEvent("onclick", function(event) { console.log(event.type); // "click" });IE的event对象同样也包含与创建它的事件相关的属性和方法,这些属性和方法也会因为事件类型的不同而有所差异。但所有事件对象都会包含下列属性:cancelBubble: 布尔值,可读可写,默认为false。将其设置为true时取消事件冒泡returnValue: 布尔值,可读可写,默认为true。将其设置为false时取消事件的默认行为srcElment: 元素,事件的目标元素,与DOM中的target属性相同type: 字符串,事件类型在IE中,事件处理程序的作用域是根据指定它的方式来确定,this的值不一定是指向事件的目标元素。因此,使用srcElement属性更具保险。请看下面代码实例,第一种方式中this的值为目标元素,而第二种方式,前面讲过这种方式的事件处理程序是在全局作用域中执行,因此this的值为window。var btn = document.getElementById("myBtn"); btn.onclick = function() { console.log(window.event.srcElement === this); // true } btn.attachEvent("onclick", function(event) { console.log(event.srcElement === this); // false });
更多相关内容:
    无相关信息