`
haiyupeter
  • 浏览: 425894 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JavaScript事件

阅读更多
1.javascript事件流的概念

冒泡型事件:事件从最确定的事件目标到最不确定的事件目标的顺序触发。
捕获型事件:事件从最不确定的对象开始触发到最确定的事件目标。
IE支持冒泡型事件,而DOM标准同时支持两种事件流,捕获型事件先发生。

<meta charset="UTF-8" />
事件测试
<script type="text/javascript">
    var $ = function(id){
        return document.getElementById(id);
    };
    function main() {
        if (document.addEventListener) {
            $('outer').addEventListener('click', function(){
                alert('outer on click');
            }, true);
            $('inner').addEventListener('click', function(){
                alert('inner on click');
            }, true);
        } else {
            $('outer').attachEvent('onclick', function(){
                alert('outer on click');
            });
            $('inner').attachEvent('onclick', function(){
                alert('inner on click');
            });
        }
    }
</script>
<div style="width: 140px; height: 155px; border: 1px solid #e33333;" onclick="alert('outer on click');">
<div style="cursor: pointer; width: 100px; height: 105px; border: 1px solid #323232;" onclick="alert('inner on click');">默认冒泡,IE与Firefox同时支持</div>
</div>
<div id="outer" style="width: 140px; height: 155px; border: 1px solid #e33333;">
<div id="inner" style="cursor: pointer; width: 100px; height: 105px; border: 1px solid #323232;">捕获型事件测试</div>
</div>




Chrome Firefox:

第一个示例,点击inner,依次先提示:”inner on click”, “outer on click”,即:默认为冒泡事件类型
第二个示例,点击inner,依次先提示:”outer on click”, “inner on click”,addEventListener中的第三个参数为useCapture,默认为false,即冒泡事件类型,此示例设置为true,则外围先响应事件(捕获型事件),建议是保持为默认false。

IE:
第一个示例,点击inner,依次先提示:”inner on click”, “outer on click”,默认为冒泡事件类型
第二个示例,点击inner,依次先提示:”inner on click”, “outer on click”,attachEvent也为冒泡事件,先响应最具体的DOM元素,没有useCapture参数

总结:在DOM元素上使用的唯一的onclick事件中,IE与Firefox, Chrome同为冒泡型事件;在动态添加事件监听上面,Firefox和Chrome通过useCapture选项,可更改为捕获型事件。

2.事件处理函数及事件监听

事件处理函数:获得对象引用,将函数赋给对应事件处理属性,此类事件只能绑定唯一一个函数。
如:

var oDiv = document.getElementById("div1");
    oDiv.onchange = function (){
    alert("test");
    }

IE中,每个对象(包含window对象)都支持两个方法:
attachEvent(“name_of_event_handler”,fnHandler);
detachEvent(“name_of_event_handler”,fnHandler);
其中attachEvent中的name_of_event_handler需要添加on参数,如 onclick

Firefox或者Chrome的标准DOM中,支持的是:
addEventListener(“name_of_event”,fnHandler,bCapture);
removeEventListerner(“name_of_event”,fnHandler,bCapture);
其中 addEventListener 的 name_of_event,不需要添加on,直接写:click

<meta charset="UTF-8" />
事件触发
<script type="text/javascript">// <![CDATA[
        function otherHandler() {
            alert("other handler occur");
        }
        function otherHandler2() {
            alert("other2 handler occur");
        }
        function changeEventHandler(){
            var v1 = document.getElementById("v1");
            if (document.addEventListener) {
                v1.addEventListener("click", otherHandler, true);
                v1.addEventListener("click", otherHandler2, true);
            } else {
                v1.attachEvent("onclick", otherHandler);
                v1.attachEvent("onclick", otherHandler2);
            }
        }
        function triggerEvent() {
            var v1 = document.getElementById("v1");
            v1.click();
        }
 
// ]]></script>
<div id="v1" style="width: 140px; height: 55px; border: 1px solid #e33333;">DIV1</div>
<div style="cursor: pointer; width: 100px; height: 45px; border: 1px solid #323232;" onclick="changeEventHandler();">添加DIV1的onclick事件</div>
<input onclick="triggerEvent();" type="button" value="触发事件" />
    


div1的onclick事件添加后,div1被点击,IE和Firefox响应顺序不同
IE:先添加,后执行”other2 handler occur”,后”other handler occur”

Firefox,Chrome:先添加,先执行”other handler occur”,后”other2 handler occur”
在使用时一定要注意时序,遇到过一个弹出浮层框,弹出后在浮层监听事件处理,遇到过这个时序问题。

3.事件对象event
在IE中,事件对象就是window的一个属性window.event

function(){
    var myevent = window.event;
}


而DOM中event是作为第一个参数传递下来的:

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


或者是直接作为第一个参数传递下来:

function(event){
}


<script type="text/javascript">
 
        function changeEventHandler(event,aa){
            alert("事件类型:" + event.type);
            if( !( typeof event.target == 'undefined')){
                // Firefox
                alert("事件源:" + event.target);
            } else{
                // IE
                alert("事件源:" + event.srcElement);
            }
        }

</script>
<div id="v1" style="width: 140px; height: 55px; border: 1px solid #e33333;">DIV1</div>
<div style="cursor: pointer; width: 100px; height: 45px; border: 1px solid #323232;" onclick="changeEventHandler(event,'aa');">改变DIV1的onclick事件</div>


同时,event还有很多参数的,可以在Firebug中看到:



4.事件相似性
IE和DOM:

获取事件类型:oEvent.type;

获取事件代码:oEvent.keyCode;

检测ctrl,shift,alt键:oEvent.shiftKey;oEvent.ctrlKey;oEvent.altKey;

获取客户端坐标:oEvent.clientX;oEvent.clientY;

获取屏幕坐标:oEvent.screenX;oEvent.screenY;

5.事件的区别
(1).获取目标
IE: oEvent.srcElement;
DOM: oEvent.target;
注意 :
在mouseover和mouseout中,鼠标移动过程中,如果元素包含子元素,会触发元素的mouseout和子元素的mouseover方法,其实这并不是我们想要的结果,我们希望在当前的元素里面,即使是子元素,也不进行任何的mouseout事件操作。

所以在事件触发时,需要对子元素位置进行判断,若为目标元素的子元素,则什么也不做,涉及到如何获取当前元素和子元素的,涉及到了浏览器的判断:
var fromElement = event.fromElement || event.relatedTarget;
var toElement = event.toElement || event.target;

同时需要判断toElement是否为目标元素的子元素或者其本身,具体可以参考如下链接:
mouseover和mouseout多次触发解决方法(兼容ie和firefox)

jQuery判断一个元素是否为另一个元素的子元素或者本身

(2).获取字符代码
IE: oEvent.keyCode;
DOM: String.fromCharCode(oEvent.charCode);

(3).阻止某个事件的行为
IE:oEvent.returnValue = false;
DOM:oEvent.preventDefault();

(4).停止事件冒泡
IE:oEvent.cancelBubble = true;
DOM:oEvent.stopPropagation();

function stopEvent(e) {
    if (!e) {
        e = window.event;
    }
    if (e.stopPropagation) {
        e.stopPropagation();
    } else {//IE
        e.cancelBubble = true;
    }
}


6.事件类型
鼠标事件:click,dbclick,mousedown,mouseup,mouseover,mouseout,mousemove
每个鼠标事件都会向event填入以下属性:坐标属性clientX,clientY,type属性,target或者srcElement,shiftKey,ctrlKey,altKey,button属性

键盘事件:keydown,keypress,keyup
每个键盘事件都会向event填入以下属性:keyCode,charCode(Dom),target或者srcElement,
shiftKey,ctrlKey,altKey

  • 大小: 19.2 KB
  • 大小: 32.3 KB
3
0
分享到:
评论

相关推荐

    JavaScript事件机制详细研究

    JavaScript 事件机制详细研究 JavaScript 事件机制是指浏览器中发生的各种事件,例如点击、鼠标悬停、键盘输入等,JavaScript 通过捕捉这些事件来执行相应的操作。本文将详细介绍 JavaScript 事件机制的实现方式和...

    JavaScript 事件处理 事件绑定 示例代码

    事件绑定 示例代码JavaScript 事件处理 事件绑定 示例代码JavaScript 事件处理 事件绑定 示例代码JavaScript 事件处理 事件绑定 示例代码JavaScript 事件处理 事件绑定 示例代码JavaScript 事件处理 事件绑定 示例...

    JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例代码

    JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例代码JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例代码JavaScript 事件处理 常用事件(鼠标事件、键盘事件、表单事件)示例...

    javascript事件详解

    JavaScript事件详解 JavaScript是一种基于浏览器的脚本语言,它的事件机制是实现动态交互的重要部分。在JavaScript中,事件是用户或浏览器对网页进行操作时触发的特定动作,比如点击按钮、鼠标移动等。本文将详细...

    使用webview加载本地html页面,并处理html页面中的javascript事件

    接下来,为了使WebView能够执行JavaScript代码并处理JavaScript事件,我们需要启用JavaScript支持。我们可以调用`WebSettings`类的`setJavaScriptEnabled()`方法: ```java WebSettings settings = webView....

    JavaScript 事件处理 二级菜单级联 示例代码

    JavaScript 事件处理 二级菜单级联 示例代码JavaScript 事件处理 二级菜单级联 示例代码JavaScript 事件处理 二级菜单级联 示例代码JavaScript 事件处理 二级菜单级联 示例代码JavaScript 事件处理 二级菜单级联 ...

    JavaScript 事件处理 下拉列表和可选项 示例代码

    JavaScript 事件处理 下拉列表和可选项 示例代码JavaScript 事件处理 下拉列表和可选项 示例代码JavaScript 事件处理 下拉列表和可选项 示例代码JavaScript 事件处理 下拉列表和可选项 示例代码JavaScript 事件处理 ...

    JavaScript程序设计——事件处理实验报告.docx

    实验报告详细介绍了JavaScript事件处理的相关知识,这在Web开发中是非常关键的一部分,因为事件是用户与网页交互的主要方式。以下是对各个知识点的详细说明: 1. **JavaScript事件基本概念**: - **事件**:是用户...

    javascript事件查询综合

    JavaScript事件查询是Web开发中的重要概念,它涉及到用户与网页交互时的各种响应处理。这篇文档“javascript事件查询综合”很可能是对JavaScript事件处理机制的详细阐述。在Web开发中,JavaScript事件模型允许开发者...

    JavaScript 事件的一些重要说明

    JavaScript事件是JavaScript编程中至关重要的一个概念,它用于响应用户或浏览器的行为,如点击、滚动、键盘输入等。本文将详细解析JavaScript事件的几个关键点:异步回调、事件对象、`this`关键字以及事件冒泡的管理...

    Javascript事件的定义.doc

    JavaScript事件是网页交互的核心,它定义了当特定动作发生时,浏览器如何响应。这些动作可以是用户的操作,如点击、滚动、键盘输入,或者是页面加载、数据改变等。JavaScript事件的处理方式有多种,包括事件处理属性...

    javascript事件大集合

    JavaScript事件是Web开发中不可或缺的一部分,它允许我们与用户进行交互,响应用户的操作,并以此来更新页面内容。本文将深入探讨JavaScript事件的各个方面,帮助开发者更好地理解和应用这些关键概念。 一、事件...

    关于编写性能高效的javascript事件的技术

    在前端开发中,编写高性能的JavaScript事件处理代码至关重要。高效的事件处理不仅能够提升用户体验,还能减少不必要的计算和DOM操作,从而加快页面的响应速度。随着Web应用的日益复杂,对JavaScript事件系统的优化...

    WEB页编程技巧──JavaScript事件的应用.pdf

    "WEB页编程技巧──JavaScript事件的应用.pdf" 本文档主要介绍了JavaScript事件在WEB页编程中的应用,包括JavaScript事件的概念、分类、事件处理器的使用、事件驱动编程等方面的知识点。 一、JavaScript事件概述 ...

    JAVASCRIPT事件与动态页面编程.pdf

    JAVASCRIPT事件与动态页面编程 本文概述了JAVASCRIPT事件、事件监视器和事件处理器,并通过一个示例程序详细介绍了如何使用JAVASCRIPT事件处理器进行动态页面编程。 JAVASCRIPT事件是指人机交互的结果,如鼠标移动...

    JavaScript事件学习小结(一)事件流

    标题中的"JavaScript事件学习小结(一)事件流"指的是JavaScript中的事件处理机制,特别是事件流的概念。事件流描述了在DOM(文档对象模型)中事件如何从根节点传播到具体的元素节点。在JavaScript中,事件是用户与...

    扣代码工具 javascript事件 捕获者2.0.zip

    "扣代码工具 JavaScript事件 捕获者2.0.zip"这个压缩包文件显然聚焦于JavaScript事件处理,特别是事件捕获的概念。事件是用户与网页交互时产生的行为,如点击按钮、滚动页面等,而事件处理则允许开发者对这些行为...

    javascript 事件

    JavaScript事件是Web开发中不可或缺的一部分,它允许用户与网页进行交互并响应用户的操作。这篇博客主要探讨了JavaScript事件的基本概念、事件模型以及如何处理事件。 首先,我们需要理解什么是JavaScript事件。...

    AJAX中不触发javascript事件

    标题中的“AJAX中不触发javascript事件”指的是在使用AJAX技术进行页面更新时,可能出现JavaScript事件不按预期触发的情况。这通常是由于AJAX请求更新页面部分时,不会触发表单提交、点击或其他依赖于页面刷新的...

Global site tag (gtag.js) - Google Analytics