1、事件对象

js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源、事件发生时的鼠标位置、事件按键等。

事件对象的获取方法:

IE中可以window.event直接获取,而Firefox中则不可以,可通过如下方法获取:

1)var event = window.event || arguments.callee.caller.arguments[0];

2)通过参数传。function(e) { var event = window.event || e; }

2、事件源

事件源即事件发生所在的元素(是最里层元素),在IE中用event.srcElement获取,在Firefox中用event.target获取。兼容性代码如下:

var event = window.event || arguments.callee.caller.arguments[0];

var targetObj = event.srcElement || event.target;

  

3、事件冒泡

  

在默认情况下,发生在一个子元素上的单击事件(或者其他事件),如果在其父级元素绑定了一个同样的事件,此时点击子元素,click事件会首先被子元素捕获,执行绑定的事件程序,之后会被父级元素捕获,再次激发一段脚本的执行,这就是所谓的“事件冒泡”。

但有的时候,在一个子元素上处理完单击事件后,不想触发其父元素的相同事件,则需要阻止冒泡的发生,阻止冒泡的方法如下:

在IE里使用 window.event.cancelBubble = true;

在Firefox里使用 event.stopPropagation();

兼容性代码如下所示:

var event = window.event || arguments.callee.caller.arguments[0];

if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; }

4、jQuery对DOM的事件触发具有冒泡特性,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤。jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation();示例代码如下:

$("div").click(function(event) { event.stopPropagation(); });

但是上面方法对使用live 绑定的事件没有作用,需要一个更简单的方法阻止事件冒泡:return false;示例代码如下:

$("div").live(function() {

//do something..

return false;

});

注意:event.stopPropagation()和return false两种阻止事件冒泡的方式有一些区别:return false 不仅阻止了事件往上冒泡,而且阻止了事件本身;event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身,比如如下代码将导致单击文件浏览按钮,无法弹出文件浏览对话框。

<div id="panel">

<input type="file" id="fileBtn"/>

</div>

<script type="text/javascript">

$("#panel").click(function() {

return false;     //return false在阻止冒泡的同时也会取消当前事件本身,这将阻止文件浏览对话框弹出

});

</script>

5、阻止事件的默认行为(比如使文本输入框的键盘输入不起作用)

上面说了阻止事件冒泡,但是事件的默认行为还是会发生,只不过事件不会再往上一级节点传递。阻止事件的默认行为的方式如下:

1)原生JS的方式:

  1. //如果提供了事件对象,则这是一个非IE浏览器
  2. if (event && event.preventDefault) {
  3. //阻止默认浏览器动作(W3C)
  4. event.preventDefault();
  5. } else {
  6. //IE中阻止函数器默认动作的方式
  7. window.event.returnValue = false;
  8. }
  9. return false;

2)jQuery的方式

在上面的第4点中已经说过了,直接返回false就行

												

JS 事件对象和事件冒泡的更多相关文章

  1. JS事件对象与事件委托

    事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...

  2. js跨浏览器事件对象、事件处理程序

    项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节 ...

  3. JS事件流、事件监听、事件对象、事件委托

    JS事件流: 01.DOM级别和DOM事件 02.JS事件流:页面中接收事件的顺序 事件冒泡阶段-->处于目标阶段-->事件捕获阶段 (事件捕获总发生在事件冒泡前面) 03.捕获:从外向里 ...

  4. JavaScript事件对象与事件的委托

    事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...

  5. 【2017-05-03】winform打印控件、事件对象和事件数据、MDI窗体容器

    一.打印控件 第一步先把打印对象搞出来. - printDocument    打印对象(将要打印的内容放到该对象里,从该对象里取内容打印) 设置他的PrintPage事件(对于要打印的每一页触发一次 ...

  6. JavaScript:事件对象Event和冒泡

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章中已经讲过事件的概念.这里讲一下注册 ...

  7. Vue2学习笔记:事件对象、事件冒泡、默认行为

    1.事情对象 <!DOCTYPE html> <html> <head> <title></title> <meta charset= ...

  8. js:事件(注册、解绑、DOM事件流、事件对象、事件委托)

    1.注册事件 (1)传统方式注册事件 <body> <button id="b1">请点击</button> <script> va ...

  9. JS事件-对象监视事件,事件触发函数

    写在前面: 一句话作为本文的核心思想:对象监视事件,事件触发函数: (一)事件 1.事件分类 (1)鼠标事件 click()                      鼠标单击 dblclick()  ...

随机推荐

  1. indexOf()忽略大小写方法

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置.如果没有出现,则输出-1. indexOf() 方法对大小写敏感!所以要检索字符串且忽略大小写的时候,可以先把字符串转换成全部 ...

  2. javascript紧接上一张for循环的问题,我自己的理解

    这类问题,通常都是在for循环里,根据i的变化作为dom的下标来作当前dom的点击事件, 预期是,每个点击事件都对应相应的i下标,但是问题是,每次点击的都是最后一次节点的dom. 原因就是其实我们作点 ...

  3. ios学习资料(一)

    IT社区: http://www.cnblogs.com/ http://www.csdn.net/ http://www.51cto.com/ http://www.cocoachina.com/ ...

  4. ios文件读取(二)

    - (void)viewDidLoad { [super viewDidLoad]; /** *  @brief 获取文件路径 * */ NSString * filePath = [self get ...

  5. unity绘制线和绘制面

    绘制线条代码,其实就是指定至少两个点,然后赋予贴图即可,不废话,上代码: using UnityEngine; using System.Collections; public class LineT ...

  6. onsubmit提交前先验证(验证不通过阻止form提交)

    <form  onsubmit = "return val();"> <input type="submit" value="提交& ...

  7. 基于webrtc的多人视频会话的demo运行程序

    服务端程序: 该服务程序为windows平台下的程序,使用libevent书写,并集成了UDP的中转程序.(该服务器程序不能和客户端程序运行在同一台PC机电脑,不然服务器程序和客户端程序会抢占同一UD ...

  8. lightoj 1236 正整数唯一分解定理

    A - (例题)整数分解 Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:32768KB     6 ...

  9. VC中窗口ID,句柄,指针三者相互转换函数【转】

    ID--HANDLE--HWND三者之间的互相转换id->句柄        hWnd = ::GetDlgItem(hParentWnd,id);id->指针        CWnd:: ...

  10. MVC请求过程 简单分析(一)

    在服务端判断客户端传过来的文件的类型,如果是静态文件,直接返回,在页面输出显示.如果是动态文件,通过aspnet_isapi.dll转交过.NetFrameWork框架执行. 创建ISAPIrunti ...