关于JS 事件冒泡和onclick,click,on()事件触发顺序
今天在给JQgrid中的标签添加click事件的时候,发现一个问题。
JQgrid的table中,点击任何位置,都会勾选点击行的checkbox,而我希望在点击我的标签的时候,不要勾选checkbox。
查看JQgrid源码,发现它的click事件是绑定到了table上,然后判断事件点击目标,找到选中行给它勾选;而我的click事件是绑定到td里面的div中。
按照事件冒泡的触发顺序,应该是我的事件先触发,之后是JQgrid的事件。
结果不是这样的。我发现JQgrid使用$().click(function(){})绑定的事件,而我使用$("body").on("click","",function(){})绑定的事件。
我希望比较一下它们的差别,专门写了一下代码,查看运行结果。
代码如下:
<div id="div_2" onclick="console.error('onclick_2')">
	<div id="div_1" onclick="console.error('onclick_1')">
		Click this Div
	</div>
</div>
JS:
	$(function(){
		$("body").on("click","#div_2",function(){
			console.error("on bind click 2");
		});
		$("body").on("click","#div_1",function(){
			console.error("on bind click 1");
		});
		$("#div_2").click(function(){
			console.error("click 2");
		});
		$("#div_1").click(function(){
			console.error("click 1");
		});
	});
执行结果:

得到结论:
onclick,click,on()的优先关系:onclick>click>on();
onclick和click绑定的事件,彼此之间遵守事件冒泡规则,从内到外触发;
on()绑定的事件,总是晚于onclick和click绑定的事件触发;
由此可以得到,使用on()绑定的事件与onclick和click绑定的事件,判断触发先后顺序时,不能只考虑事件冒泡规则。
关于JS 事件冒泡和onclick,click,on()事件触发顺序的更多相关文章
- window.open('') 火狐,IE事件冒泡处理,点击事件冒泡处理
		
window.open('') 火狐,IE事件冒泡处理,点击事件冒泡处理 写PC下拉菜单的时候,hover样式显示下拉菜单,可能会这样写 <li class="xb_li1" ...
 - js /jquery停止事件冒泡和阻止浏览器默认事件
		
1>js阻止冒泡事件 var el = window.document.getElementById("a"); el.onclick = function (e) { // ...
 - JS中的事件冒泡(Bubble)和事件捕获(capture)以及如何阻止事件的冒泡
		
对“捕获”和“冒泡”这两个概念,通常我们对冒泡了解和使用的会更多一些,因为在我们使用的所有浏览器中,都支持事件冒泡 ,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefo ...
 - vue-阻止事件冒泡-开启右键-键盘类事件
		
一: 阻止事件冒泡 布局: 当点击按钮时,会触发button的click 也会触发父级的方法 <div id="box"> <div @click="p ...
 - JS事件冒泡机制和兼容性添加事件
		
本篇文章主要来讲讲 事件的冒泡机制 和 添加事件的几种方法. 一. JS的时间传递顺序: 捕获阶段 -> 目标阶段 -> 冒泡阶段 捕获阶段是指从父层往子层找.比如 <body> ...
 - 阻止后续事件的发生 onclick 双return 事件绑定(..$).click一个return
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - JS中绑定事件顺序(事件冒泡与事件捕获区别)
		
在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段(重要),这也是为什么当父类和子类都绑定了某个事件,会先调用子类绑定的事件,后调用父类的事件.直接看下面实例 <!Doctype ...
 - 什么是JS事件冒泡?
		
什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...
 - [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播
		
-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...
 
随机推荐
- [转]DevExpress.XtraGrid.GridControl gridView自动列宽代码
			
gridView1.OptionsView.ColumnAutoWidth = false; for (int I = 0; I < gridView1.Columns.Count; I++ ...
 - 英语学习app分析
			
以下数据分析由队员张波收集整理队员链接 队友的博客 一.数据统计 为了让统计数据更加准确可信,我们选取了三款android平台的应用市场软件作为数据的来源. 英语学习app下载量统计表: 序号 应用名 ...
 - leetcode174. Dungeon Game
			
// learn from https://discuss.leetcode.com/topic/6912/c-dp-solution ''' class Solution { public: int ...
 - Thinkphp的单字母函数整理
			
有人不太喜欢TP这种单字母函数,其实这也是TP的一个特色,如果理解了这些函数的作用,不管是背,还是写,都是非常方便的,接下来我们以字母顺序开始.A函数 B函数 C函数 D函数 F函数 L函数 R函数 ...
 - 一键安装lamp环境 centos
			
linux centos yum安装LAMP环境 /*************链接**************/http://www.cnblogs.com/suger/p/3832093.html ...
 - es6 static
			
static 定义的是类的方法只有类能调用,而普通方法是实例的方法只有类实例能调用.变量也一样. class A { static fn() { console.log('sss'); } fn2() ...
 - nil与NULL的区别
			
首先nil表示无值,任何变量在没有被赋值之前的值都为nil,对于真假判断,只有nil与false表示假,其余均为真.而NULL是一个宏定义,值为0.并且,nil一般赋值给空对象,NULL一般赋值给ni ...
 - Ninject之旅之七:Ninject依赖注入
			
摘要 可以使用不同的模式向消费者类注入依赖项,向构造器里注入依赖项是其中一种.有一些遵循的模式用来注册依赖项,同时有一些需要避免的模式,因为他们经常导致不合乎需要的结果.这篇文章讲述那些跟Ninjec ...
 - 会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它
			
解决方法是新建 全局应用程序类 Global.asax 在 Session_Start 函数中 添加 string sessionId = Session.SessionID; protected v ...
 - CheckBox设置Enabled为False后,无法修改ForeColor
			
设置CheckBox的AutoCheck为False,Enabled为True,即可解决.