DOM事件参数——event对象

事件处理程序

事件的名称 click ;load;mouseover;事件处理程序以**‘on**’开头;因此click事件的事件处理程序就是onclickload事件的事件处理程序就是onload

HTML事件处理程序可以直接在事件处理程序中,添加执行的函数,也可以进行调用其他地方定义的脚本;

<button oncilck="alert('hello world!')"></button>//执行代码直接添加到事件中
<button onclick='hello()'></button>//调用其他脚本
<script>
    function hello(){
      
      
    	alert('hello,world!')
    }
</script>

event对象

HTML事件处理程序会创建一个封装着元素属性值的函数,这个函数中有一个局部变量 event ,也就是事件对象。

在用户触发事件,元素执行事件处理函数的时候,默认会向事件处理函数传入一个 event 对象,它记录了该事件的状态和行为。

<div id="box1">box1</div>
<div id="box2">box2</div>
<div id="box3" onclick="log3(this)">box3</div>
<script>
    document.getElementById("box1").addEventListener("click", function () {
      
      
        console.log(event);//PointerEvent {isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0, …}
        console.log(event.target);//<div id="box1">box1</div>
    })

    document.getElementById("box2").onclick = function () {
      
      
        console.log(event);//PointerEvent {isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0, …}
        console.log(event.target);//<div id="box2">box2</div>
    }
    
    function log3(self) {
      
      
        console.log(self);//<div id="box3" οnclick="log3(this)">box3</div>
        console.log(event);
        console.log(event.currentTarget);//与console.log(self);输出一致
    }
</script>

如果使用html事件属性直接在元素中添加事件(如上例中的 #box3 ),对应事件函数还可以接收一个 this 参数,这个 this 指向元素本身,与event.currentTarget一致

event 常用属性和方法

  • type 事件类型
  • target 事件发出者(触发事件的元素)
  • currentTarget 事件监听者(被绑定事件的元素)
    <div class="parent" onclick="clickParent()">
        父元素
        <div class="son">子元素</div>
    </div>
    <script>
        function clickParent() {
            
            
            console.log(event.currentTarget);
            console.log(event.target);
        }
    </script>
    

    当点击 parent 时,输出:

    <div class="parent" onclick="clickParent()">...</div>
    <div class="parent" onclick="clickParent()">...</div>
    

    当点击 son时,输出:

    <div class="parent" onclick="clickParent()">...</div>
    <div class="son">子元素</div>
    
  • stopPropagation() 阻止事件冒泡或捕获
  • cancelable阻止事件冒泡或捕获

  • preventDefault() 阻止浏览器默认行为
    <a href="http://www.baidu.com" target="_blank" onclick="handleClick()">百度一下</a>
    <script>
    	function handleClick() {
            
            
            event.preventDefault()//点击 a 元素不会跳转至链接,什么也不会发生
        }
    </script>
    

猜你喜欢

转载自blog.csdn.net/weixin_44001906/article/details/125667865