HTML事件处理程序
特定的元素支持的每个事件都可以使用事件处理程序的名字以HTML属性的形式来指定。属性的值必须是能够执行的JavaScript代码
<input type="button" value="Click Me" onclick="console.log('Clicked')"/>
<script>
function showMessage() {
console.log("Hello world!");
}
</script>
<input type="button" value="Click Me" onclick="showMessage()"/>
DOM0 事件处理程序
事件句柄的形式
let btn = document.getElementById("myBtn");
btn.onclick = function() {
console.log("Clicked");
};
- this等于元素
- 注册在事件流的冒泡阶段
- 把事件处理程序属性设置为null,可以移除DOM0方式添加的事件处理程序
- 也能清除在HTML事件处理程序
- 所以DOM0事件处理程序优先于HTML事件处理程序
DOM0事件处理程序只能设置一个处理函数,最后一次设置会覆盖上一次
DOM2 事件处理程序
可以设置多个事件处理程序,按照绑定的先后顺序触发。
addEventListener() 为事件处理程序赋值
removeEventListener() 为事件处理程序移除
attachEvent()
- detachEvent(
- 同样都有 2个参数
- 事件处理程序的名字
- 事件处理函数
- 只支持事件冒泡
跨浏览器事件处理程序
语雀内容function addEvent(el, type, fn){
if(el.addEventListener){
el.addEventListener(type, fn, false);
}else if(el.attachEvent){
el.attachEvent('on' + type, function(){
/*
* 事件运行时this指向
* 事件谁触发this就指向触发对象。
* 而attachEvent,this只会指向window。可以用call/apply解决this指向。
*/
fn.call(el);
}
}else{
el['on' + type] = fn;
}
}
- 同样都有 2个参数