JS事件处理和事件对象

时间:2021-11-25 04:35:36

1.HTML事件处理

直接添加到html结构中处理程序属性

<body>
<button onclick="demo()">按钮</button>
<script>
function demo(){
    alert("html事件处理");
}
</script>
</body>

JS事件处理和事件对象

这种html事件处理有很大坏处是修改一处函数名称必须同时修改两处(onclick事件内容也要修改)

2.DOMO级事件处理

把一个函数赋值给一个事件

<body>
<button id="btn">按钮</button>
<script>
var a=document.getElementById("btn");
a.onclick=function demo(){alert("DOMO级事件处理")};
</script>
</body>

执行后点击按钮弹出窗口DOMO级事件处理

若加上a.onclick=null则赋值为空,点击按钮不会弹出窗口

它的弊端是如果同时赋值多个a.onclick则前面的事件会被覆盖只弹出最后一个窗口

3.DOMO2级事件处理

addEventListener("事件名",事件函数,"布尔值(可忽略)")

true为事件冒泡

false为事件捕获

现在一般不再使用布尔值,因为多数情况下采取事件冒泡

removeEventListener移除该事件

<body>
<button id="btn">按钮</button>
<script>
var a=document.getElementById("btn").addEventListener("click",function demo(){alert("DOMO二级事件处理")});
</script>
</body>

弹出窗口DOMO二级事件处理

<body>
<button id="btn">按钮</button>
<script>
var a=document.getElementById("btn");
a.addEventListener("click",demo1);
a.addEventListener("click",demo2);
a.addEventListener("click",demo3);
function demo1(){
    alert("DOMO二级处理事件1");
}
function demo2(){
    alert("DOMO二级处理事件2");
}
function demo3(){
    alert("DOMO二级处理事件3");
}
</script>
</body>

多个窗口依次弹出也不会被覆盖,所以DOMO二级事件处理使用最为普遍,可用removeEventListener(“事件名”,事件函数名)移除掉某一事件

二、事件对象

1.事件对象:

在触发一个DOMO事件时都会产生一个对象

2.事件对象event:

(1)type:获取事件的类型

<body>
<button id="btn">按钮</button>
<script>
var a=document.getElementById("btn");
a.addEventListener("click",demo1);
function demo1(e){
    alert(e.type);
}
</script>
</body>

弹出窗口click,表示这个事件的类型是click事件

(2)target:获取事件的目标

<body>
<button id="btn">按钮</button>
<script>
var a=document.getElementById("btn");
a.addEventListener("click",demo1);
function demo1(e){
    alert(e.target);
}
</script>
</body>

弹出窗口

JS事件处理和事件对象

表示事件的目标是button元素

(3)stopPropagation():阻止事件的冒泡

 

<body>
<div id="div">
    <button id="btn">按钮</button>
</div>
<script>
    document.getElementById("btn").addEventListener("click",demo1);
    document.getElementById("div").addEventListener("click",demo2);
    function demo1(e){
        alert(e.target);
    }
    function demo2(r){
        alert(r.type);
    }
</script>
</body>

执行后先弹出目标button元素后弹出类型click,由此可知这是事件冒泡,从最根本的元素触发,如果我们不想要事件冒泡,可以采取stopPropagation

<body>
<div id="div">
    <button id="btn">按钮</button>
</div>
<script>
    document.getElementById("btn").addEventListener("click",demo1);
    document.getElementById("div").addEventListener("click",demo2);
    function demo1(e){
        alert(e.target);
        e.stopPropagation();
    }
    function demo2(r){
        alert(r.type);
    }

</script>
</body>

需要注意的是stoPropagation应放在最根本元素的函数里,这样调用才会阻止事件冒泡

(4)preventDefault():阻止事件的默认行为()

<body>
<div id="div">
    <button id="btn">按钮</button>
    <a href="http://baidu.com" id="aid">baidu</a>
</div>
<script>
    document.getElementById("btn").addEventListener("click",demo1);
    document.getElementById("div").addEventListener("click",demo2);
    document.getElementById("aid").addEventListener("click",demo3);
    function demo1(e){
        alert(e.target);

    }
    function demo2(r){
        alert(r.type);
    }
function demo3(q){
   
    q.preventDefault();
}
</script>
</body>

执行后点击baidu不会弹出窗口也不会跳转页面,因为preventDefault把它的默认行为阻止了