js事件处理相关

js的事件模型是事件流模型,即意味着页面上不止一个元素响应相同的事件,当我们点击页面上的按钮时,实际上是点击了按钮,以及按钮的容器------整个页面。

对于IE,使用的是事件冒泡技术。其意思是从最内部点击的元素开始,向上触发到最外部(document 对象)。

而对于Netscape来说,使用称为事件捕获的解决方案。

如:

<!DOCTYPE html>

<html>

<head>

    <title></title>

</head>

<body>

    <input type="button" style="font-size: 18px" value="PLESE PUSH ME" οnclick="c()"/>

</body>

</html>

事件冒泡  触发路径为:input->body->document

到了IE3.0,  HTML元素也可以接收冒泡事件。触发路径为:input->body->html->document

Mozilla浏览器支持html元素上的事件。但是,事件也可以上升到不是DOM的一部分的windows对象。

  触发路径为:input->body->html->document->window

事件捕获

Netscape 触发路径为:document->body->input

 

DOM事件流

DOM同时支持事件的捕获和事件的冒泡, 但是事件捕获先发生。

触发路径:windows->document->body->input->body->document->windows

  DOM事件有一个特色是,文本节点也可以触发事件(IE不行)。

 

事件处理:包括两个方面:传统事件处理和现代事件处理

  传统事件处理:1、所有浏览器都支持 。2、只会执行最后的绑定事件,即执行单一事件

  (1)js中指定事件处理

      匿名函数指定事件

<input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME"/>

    <script>

        var obtn = document.getElementById("mybtn");

        obtn.onclick = function(){

            alert("====");

        }

   </script> 

 

   已有函数名

<script>

    function showmsg(){

        alert("-_-!!");

    }

</script>

<body>

    <input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME"/>

    <script>

        var obtn = document.getElementById("mybtn");

        obtn.onclick = showmsg;

 

    </script>

</body>

注意:1、绑定事件处理程序到事件属性时,只能引用函数的名称,后面不能加括号。加括号意味着马上执行函数,不用通过点击事件。

           2、不论函数的定义是怎样的,必须确保在XHTML元素被添加到DOM之前,登记事件处理程序,否则,将因为一个不存在的对象而得到一个错误。即最好不要将事件处理程序写在HTML标签后。

 

(2)XHTML标记中处理事件

<input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME" οnclick="alert('-_-!!');"/>

  

注意:在传统事件处理中不可书写多个相同的事件,事件处理会覆盖,只执行最后绑定的事件:

<input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME" οnclick="alert('-_-!!');"/>

    <script>

        var obtn = document.getElementById("mybtn");

        obtn.onclick = function(){

            alert("0_-!!");

        }

    </script>

运行结果只会执行最后绑定的第二个。这就是单一事件处理。

 

现代事件处理程序

1、兼容性不是很好。2、可以为每个事件指派多个事件处理。

(1)IE中

[object].attachEvent("事件处理程序的名称", 函数); //  添加事件处理程序

[object].detachEvent("事件处理程序的名称", 函数); // 删除事件处理程序

如:

<script>

    function showmsg(){

        alert("-_-!!");

     }

    function showmsg2(){

        alert("0_-!!");

    }

</script>

<body>

    <input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME" />

    <script>

        var obtn = document.getElementById("mybtn");

        obtn.attachEvent("onclick", showmsg);

        obtn.attachEvent("onclick", showmsg2);

    </script>

</body>

 

(2)DOM

[object].addEventListener("事件处理程序的名称", 函数, bCapture); //  添加事件处理程序

[object].removeEventListener("事件处理程序的名称", 函数, bCapture); // 删除事件处理程序

第三个参数是指程序是否用在冒泡或捕获阶段。

 

<script>

    function showmsg(){

        alert("-_-!!");

     }

    function showmsg2(){

        alert("0_-!!");

    }

</script>

<body>

    <input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME" />

    <script>

        var obtn = document.getElementById("mybtn");

        obtn.addEventListener("click", showmsg,false);

        obtn.addEventListener("click", showmsg2,false);

    </script>

 

</body>

 

用传统方式直接将函数指派给事件处理程序,那么事件处理程序就是在冒泡阶段添加的。

obtn.onclick = showmsg;

==

obtn.addEventListener("click", showmsg,false);

 

事件处理的返回值

 

<input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME" οnclick="return confirm('are you sure?')"/>

 

只有使用return语句了才会返回一个值

如果是这样:那么confirm的值是不会返回给浏览器的。

<input id="mybtn" type="button" style="font-size: 18px" value="PLESE CLICK ME" οnclick="confirm('are you sure?')"/>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值