js-事件绑定

事件:JavaScript中的事件是由访问web页面用户的一系列操作引起的,比如点击鼠标,键盘按键等。当用户执行某些操作的时候再去执行一些代码。

事件处理函数分为三类:鼠标点击事件,键盘按键事件,HTML事件;每一个事件都有自己的触发范围,如果超出了这个范围,就不会起作用 

  •     事件模型:内联模型、脚本模型、DOM2模型
    • 内联模型:事件处理函数是html元素的一个属性,即把事件处理函数代码写在html文件中 
在HTML中把事件处理函数作为属性来执行JS代码   

<div id="d1" οnclick="alert('事件函数')">

测试DIV

</div> 注意其中的单双引号 


<div id="d1" οnclick="box()">

测试DIV

</div>  

PS: 不能够将box函数放在window.onload中,否则就看不到这个函数
    • 脚本模型:内联模型违反了HTML和JS代码分离的原则,所有可以在JS中处理事件,就是脚本模型

 脚本模型中首先是通过DOM来获得元素,然后给元素绑定事件处理函数:      

 元素名.事件处理函数名 = 绑定的函数名

绑定函数的时候,有两种方法

一种是绑定匿名函数:

box.onclick = function(){};
一种是绑定外部通用函数:

box.oncclick = click;这种模式中注意,后面是赋值click函数的函数名,是没有添加括号的,如果添加了括号就是执行函数而不是绑定函数(注册函数)

  • 在实际实战项目当中,我们的工作是分开给团队成员分工合作的,假设每个成员都会想用自己的window.onload,但是我们可以用简单的的程序来证明,直接写两个window.onload在js文件里面,起作用的是后面的那个事件;

    如下:

        <script type="text/javascript">
            var a=5;b=9;
            window.οnlοad=function(){
                alert('a');
            }
            window.οnlοad=function(){
                alert('b');
            }
        </script>

    那这个时候我们就需要用到事件绑定了。

  •     IE方式

    attachEvent(事件名称,函数)。绑定事件处理函数
     detachEvent(事件名称, 函数),解除绑定

  •     DOM方式

    addEventListener(事件名称,函数, 捕获)
     removeEventListener(事件名称, 函数, 捕获)

    下面先举个例子:
              1、在IE浏览器中的写法://attachEvent(事件名, 函数)

    <!DOCTYPE HTML>
        <html>
        <head>
        <meta charset="utf-8">
        <title>无标题文档</title>
        <script>
            window.οnlοad=function ()
            {
                var oBtn=document.getElementById('btn1');
            
                oBtn.attachEvent('onclick', function ()
                {
                    alert('a');
                });
                oBtn.attachEvent('onclick', function ()
                {
                    alert('b');
                });        
            };
        </script>
        </head>
        <body>
        <input id="btn1" type="button" value="按钮" />
        </body>
        </html>

IE是先弹出b再弹出a的

                2、在非IE中的写法://addEventListener(事件名, 函数, false)

<!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <script>
        window.οnlοad=function ()
        {
            var oBtn=document.getElementById('btn1');
        
            
            oBtn.addEventListener('click', function ()
            {
                alert('a');
            }, false);
            oBtn.addEventListener('click', function ()
            {
                alert('b');
            }, false);
        };
    </script>
    </head>
    <body>
        <input id="btn1" type="button" value="按钮" />
    </body>
    </html>

非IE是先弹出a再弹出b的

  • js中好东西都不兼容,兼容写法可将上面两个函数合并

<script>
        window.οnlοad=function ()
        {
            var oBtn=document.getElementById('btn1');
            
            if(oBtn.attachEvent)
            {
                oBtn.attachEvent('onclick', function ()
                {
                    alert('a');
                });
                oBtn.attachEvent('onclick', function ()
                {
                    alert('b');
                });
            }
            else
            {
                oBtn.addEventListener('click', function ()
                {
                    alert('a');
                }, false);
                oBtn.addEventListener('click', function ()
                {
                    alert('b');
                }, false);
            }
            
        };
    </script>

  • 常用函数,我们可以把它封装起来:

<script>
        function myAddEvent(obj, ev, fn)
        {
            if(obj.attachEvent)
            {
                obj.attachEvent('on'+ev, fn);
            }
            else
            {
                obj.addEventListener(ev, fn, false);
            }
        }
        window.οnlοad=function ()
        {
            var oBtn=document.getElementById('btn1');
            
            myAddEvent(oBtn, 'click', function (){
                alert('a');
            });
            
            myAddEvent(oBtn, 'click', function (){
                alert('b');
            });
        };

    </script>

  • 再回到文章开头讲的,实战中要用到两个window.onload

<script>
        function myAddEvent(obj, ev, fn)
        {
            if(obj.attachEvent)
            {
                obj.attachEvent('on'+ev, fn);
            }
            else
            {
                obj.addEventListener(ev, fn, false);
            }
        }
        myAddEvent(window,'load',function ()
        {
            alert('a');
        });
        myAddEvent(window,'load',function ()
        {
            alert('b');
        });
    </script>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值