JavaScript教程:事件、事件注册(事件绑定)

js事件

HTML 事件是发生在 HTML 元素上的事情。

当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件。

常用事件

  • onload 加载完成事件: 页面加载完成之后触发,常用于初始化操作
  • onclick 单击事件: 常用于按钮的点击操作。
  • onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法。
  • onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作
  • onsubmit 表单提交事件: 常用于表单提交前,验证表单项是否合法,如:是否填写登录名

事件注册(事件绑定)

告诉浏览器,当触发事件时,要执行的函数

有以下方式:

  • html标签绑定
  • 直接绑定(DOM0级)
  • 事件监听(DOM2级)

html标签绑定

通过 html 标签的事件属性,指定 触发事件时,要执行的函数

例子
<script>
    function test() {
        alert("点击按钮");
    }
</script>

<button onclick="test();">按钮</button>

通过 标签的 onclick 属性,指定 点击事件调用 test() 函数

直接绑定(DOM0级)

通过 js 代码,指定 触发事件时,要执行的函数

例子
<script>
    function test() {
        alert("点击按钮");
    }
    //页面加载完成之后,执行此函数
    window.onload=function(){
        //获取 id 是btn的对象
        var btnObj = document.getElementById("btn");
        //绑定onclick事件
        btnObj.onclick = test
    }
</script>

<button id="btn">按钮</button>

事件监听(DOM2级)

符合DOM2的规定,绑定后可以设定事件流的顺序

dom对象.addEventListener(eventType,fun,eventFlow);

形参:

  • eventType:事件类型,例如 click(没有on),字符串类型。
  • fun:响应函数,可以为匿名函数,但使用匿名函数 无法解除绑定,在函数中 this 指向当前 dom对象。
  • eventFlow:控制事件在冒泡时触发还是在捕获时触发
    • false:事件在冒泡阶段触发,默认值
    • true:事件在捕获阶段执行
例子
<script>
    function test() { 
        alert("点击按钮"); 
    }
    //页面加载完成之后,执行此函数
    window.onload=function(){
        //获取 id 是btn的对象
        var btnObj = document.getElementById("btn");
        //绑定onclick事件
        btnObj.addEventListener("click",test)
    }

</script>
<button id="btn">按钮</button>

事件解除绑定

dom对象.removeEventListener(eventType,fun);

形参:

  • eventType:事件类型,例如 click(没有on),字符串类型。
  • fun:响应函数名,匿名函数无法解除
例子
<script>
    function test() { 
        alert("点击按钮"); 
    }
    //页面加载完成之后,执行此函数
    window.onload=function(){
        //获取 id 是btn的对象
        var btnObj = document.getElementById("btn");
        //绑定onclick事件
        btnObj.addEventListener("click",test)

        //获取 id 是btn的对象
        var btnObj2 = document.getElementById("btn2");
        //绑定onclick事件
        btnObj2.addEventListener("click",function(){
            btnObj.removeEventListener("click",test)
        })
    }

</script>
<button id="btn">按钮</button>
<button id="btn2">解除事件监听</button>

原文出处:/show_1IX1HrZV1dq2.html