zoukankan      html  css  js  c++  java
  • Javascript Event

    事件原理

    JS的事件原理,先看一段HTML。

    <html>
    <head>
    <title>Example</title>
    </head>
    <body onclick=”handleClick()”>
    <div onclick=”handleClick()”>Click Me</div>
    </body>
    </html>
    

     点击Click Me,会发生什么事呢?

    DOM支持事件捕获(event capturing)及事件冒泡(event bubbling),前者是netscape浏览器的事件处理机制,后者是ie的处理机制。

    netscape的事件捕获模型也叫top-down model,从上往下,直到target(div)。 而IE是从target(div)一直往上传递事件,就像一个气泡从水底往上冒。

    例子

    这是一个事件冒泡的例子,

    alert input

    修改这一句

    // oEvent.cancelBubble = true;

    则alert结果为 input body html

    <html onclick="alert('html')">
    <head>
    <title>Stopping Event Propagation Example</title>
    <script type="text/javascript">
    function handleClick(oEvent) {
    	var ie = !-[1,]; // 检测是否IE
    	alert("input");
    	if (ie) {  
    		oEvent.cancelBubble = true; // 取消事件冒泡 
    	} else {
    		oEvent.stopPropagation();
    	}
    }
    </script>
    </head>
    <body onclick="alert('body')">
    <input type="button" value="Click Me" onclick="handleClick(event)" />
    </body>
    </html>
    

    事件处理

    为事件添加处理函数

    HTML

    <div onclick=”alert(‘I was clicked’)”></div>
    

    JS

    var oDiv = document.getElementById(“div1”);
    oDiv.onclick = function () {
    alert(“I was clicked”);
    };
    

    IE,每个元素及WINDOW对象都有2个函数: attachEvent, detachEvent.

    [Object].attachEvent(“name_of_event_handler”, fnHandler);
    [Object].detachEvent(“name_of_event_handler”, fnHandler);
    

     上面的例子可以写成如下形式

    var fnClick = function () {
    alert(“Clicked!”);
    };
    var oDiv = document.getElementById(“div”);
    oDiv.attachEvent(“onclick”, fnClick); //add the event handler
    //do some other stuff here
    oDiv.detachEvent(“onclick”, fnClick); //remove the event handler
    

    也同时可以为一个事件指派多个Handler。

    Netscape Dom method

    [Object].addEventListener(“name_of_event”, fnHandler, bCapture);
    [Object].removeEventListener(“name_of_event”, fnHandler, bCapture);

    添加事件处理函数

    var fnClick1 = function () {
    alert(“Clicked!”);
    };
    var fnClick2 = function () {
    alert(“Also clicked!”);
    };
    var oDiv = document.getElementById(“div1”);
    oDiv.addEventListener(“onclick”, fnClick1);
    oDiv.addEventListener(“onclick”, fnClick2);
    

    事件对象

    当一个事件发生时,我们需要知道这个事件的一些细节,如

    1,那个对象引起的事件

    2,事件发生时,鼠标的相关信息

    3,事件发生时,键盘的相关信息

    这些细节在IE及其他浏览器的获取方式是不同的,

    IE

    oDiv.onclick = function () {
    var oEvent = window.event;
    }

    Netscape

    oDiv.onclick = function () {
    var oEvent = arguments[0];
    }
    oDiv.onclick = function (oEvent) {
    }
    

    事件的类型有很多,不同事件类型的属性在不同浏览器也有差异,这些都需要不断的练习,才能熟练掌握,未完待续。

  • 相关阅读:
    java忽略安全警告注解@SuppressWarnings
    spring data jpa 报for input String "id"错误解决
    spring Data Jpa 报错 failed to lazily initialize a collection of role: com.itheim.pojo.Role.users, could not initialize proxy
    记一次Content type 'application/json;charset=UTF-8' not supported解决方案
    包冲突异常 loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFacto
    Java运算符(&)、(|)、(^)、(~)
    Java中的原码、补码、反码
    vim编辑器
    Linux yum、tar、rpm、zip、gzip命令的使用
    error Couldn't find a package.json file in
  • 原文地址:https://www.cnblogs.com/arist/p/3340470.html
Copyright © 2011-2022 走看看