JavaScript注册事件

1. 两种注册事件的方式

  • 第一种方式:在标签中使用事件句柄,在事件句柄后编写js代码,事件句柄对应的事件发生之后,“注册”在事件句柄当中的代码被监听器调用。注意,这种方式代码顺序有要求!
    <!--注册事件的第一种方式:在标签中使用事件句柄-->
    <script>
        /*sayHello()函数在页面打开的时候并不会执行,只是当页面打开的过程中完成对事件的绑定,
        * 完成对事件的注册,以后只有当该事件发生之后sayHello()函数才会执行,此函数称为回调函数(callback function)
        * 回调函数特点:监听器负责调用函数,程序员不负责。事件发生后监听器会调用此回调函数*/
        function sayHello() {
            console.log('hello')
        }
    </script>
    <input type="text" onclick="sayHello()">
  • 第二种方式:利用获取节点id的方式来绑定事件
<body>
<!--这段代码input标签必须在script标签之前,不然mbt为undefined,程序报错-->
<input type="button" value="触发绑定事件" id="mbt">
<script>
    sum = function () {
        console.log("执行了sum函数");
    };
    /*根据id获取节点对象*/
    var newbt = document.getElementById("mbt");
    newbt.onclick = sum;
</script>
</body>

如果希望以上代码中,input标签在script之后还能正常运行,可以考虑使用onload方式

<body onload="pageOnload()">
<script>
    function pageOnload() {
        /*页面加载完成之后才会执行下面的代码,此时mbt这个id已经加载完成了*/
        sum = function () {
            console.log("执行了sum函数");
        };
        /*根据id获取节点对象*/
        var newbt = document.getElementById("mbt");
        newbt.onclick = sum;
    }
</script>
<input type="button" value="触发绑定事件" id="mbt">
</body>

以上的代码onload仍是第一种绑定方式,可以继续优化:

<!--优化onload绑定事件-->
<body>
<script>
    function pageOnload() {
        console.log("页面加载后执行此函数");
    }
    /*页面打开的时候,会执行下面的代码,作用:将回调函数pageOnload注册到load事件中*/
    /*页面加载完毕后,会发现load事件从而执行绑定的对应函数【回调函数】*/
    window.onload = pageOnload;
</script>
</body>

综上,建议使用onload绑定事件,以避免第一种方式可能出现的代码顺序问题,下面是标准格式:

<!--优化onload绑定事件-->
<!--优化onload绑定事件-->
<body>
<script>
    /* 匿名函数形式 */
    window.onload = function (ev) {
        /* 给按钮1绑定鼠标单击事件属性 */
        var button1 = document.getElementById("button1");
        button1.onclick = function (ev2) {
            console.log("button1");
        };

        /* 给按钮2绑定鼠标单击事件属性 */
        var button2 = document.getElementById("button2");
        button2.onclick = function (ev2) {
            console.log("button2");
        };

        /* 上面的代码也可以简写成下面的形式 */
        /*
        document.getElementById("button1").onclick = function () {  };
        document.getElementById("button2").onclick = function (ev2) {  };
        */
    }
</script>
<input type="button" value="按钮1" id="button1">
<input type="button" value="按钮2" id="button2">
</body>

2. 根据id获取节点访问属性

  • document:代表整个HTML文档,是DOM的顶级对象
  • window:代表整个浏览器窗口,是BOM的顶级对象
  • getElementById:根据id获取节点属性,如 var elem = document.getElementById("节点id"); 获取此节点对象后,可以引用该节点(即标签)的任何属性【通过 . 的方式】。如 elem.type = "text";

3. 案例:捕捉回车键【捕捉键值】

  • 监听器调用回调函数时会传过来一个事件对象,可以在function中使用该对象
  • keyCode是键盘事件对象的属性,根据该属性可以获取输入的键值、
  • 键盘回车键是13,ESC键是27
<!--捕捉回车键-->
<body>
<script>
    /* 使用onload解决代码顺序问题 */
    window.onload = function (ev) { 
        /* 使用keydown捕捉键盘按下事件 */
        document.getElementById("load").onkeydown = function (ev2) { 
            if (ev2.keyCode == 13)
                console.log("捕捉到回车键,登陆中");
            else if (ev2.keyCode == 27)
                console.log("捕捉到ESC键,退出中");
        }
    }
</script>
<input type="text" value="" id="load">
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值