jQuery中on绑定事件后引发的事件冒泡问题如何解决_jquery

用on绑定时,我把子元素的 绑定到 document,而把父元素绑定到上级元素,导致 return false 阻止冒泡无效。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>事件冒泡</title>
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(function () {
$(document).on("click","#p1",function(e){
console.log(e.target.tagName);
console.log("p1被点击了");
//e.stopPropagation(); //终止冒泡的方法
return false;
})
$("#aa").on("click","#td1",function(e){
console.log(e.target.tagName);
console.log("td1被点击了");
})
$("#aa").on("click","#tr1",function(e){
console.log(e.target.tagName);
console.log("tr1被点击了");
})
$("#aa").on("click","#table1",function(e){
console.log(e.target.tagName);
console.log("table1被点击了");
})
});
</script>
</head>
<body id="aa">
<table onclick="alert('这是table')">
<tr onclick="alert('这是tr')">
<td onclick="alert('这是td')">
<p onclick="alert('这是p')">段落</p>
</td>
</tr>
</table>
<table id="table1">
<tr id="tr1">
<td id="td1">
<p id="p1">你好</p>
</td>
</tr>
</table>
</body>
</html> 

on方法 将click等事件绑定在document对象上,页面上任何元素发生的click事件都冒泡到document对象上得到处理。

增加了绑定效率。当事件冒泡到document对象时,检测事件的target,如果与传入的选择符(这里是button)匹配,就触发事件,否则不触发。

修改为统一绑定对象后即解决,初步认为是因为 on方法的绑定机制问题。

所以return false 无效。子元素和父元素修改为相同 绑定元素后,问题解决

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>事件冒泡</title>
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(function () {
$("#aa").on("click","#p1",function(e){
console.log(e.target.tagName);
console.log("p1被点击了");
//e.stopPropagation(); //终止冒泡的方法
return false;
})
$("#aa").on("click","#td1",function(e){
console.log(e.target.tagName);
console.log("td1被点击了");
})
$("#aa").on("click","#tr1",function(e){
console.log(e.target.tagName);
console.log("tr1被点击了");
})
$("#aa").on("click","#table1",function(e){
console.log(e.target.tagName);
console.log("table1被点击了");
})
});
</script>
</head>
<body id="aa">
<table onclick="alert('这是table')">
<tr onclick="alert('这是tr')">
<td onclick="alert('这是td')">
<p onclick="alert('这是p')">段落</p>
</td>
</tr>
</table>
<table id="table1">
<tr id="tr1">
<td id="td1">
<p id="p1">你好</p>
</td>
</tr>
</table>
</body>
</html> 

以上所述是小编给大家介绍的jQuery中on绑定事件后引发的事件冒泡问题及解决办法,希望能够帮助到大家!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jquery
, on绑定事件
jquery事件冒泡
jquery 绑定事件 冒泡、jquery阻止事件冒泡、jquery 事件冒泡、jquery取消事件冒泡、jquery防止事件冒泡,以便于您获取更多的相关知识。

时间: 2024-12-24 21:04:23

jQuery中on绑定事件后引发的事件冒泡问题如何解决_jquery的相关文章

jQuery中animate动画第二次点击事件没反应

  这篇文章主要介绍了jQuery中animate动画第二次点击事件没反应的解决方法,非常的实用,有需要的小伙伴可以参考下 用animate做点击翻页动画时发现第二次点击事件动画没反应,而第一次点击有动画效果,代码如下: 代码如下: $(".page").stop().animate({top:"-300px"}, 800, 'easeInOutExpo'); 第二次点击事件动画没反应的原因:top是page元素顶部相与其父元素顶部的距离,第一次点击后,page元素

哪位大哥大姐能给我一份JQuery中treeview绑定右键菜单

问题描述 哪位大哥大姐能给我一份JQuery中treeview绑定右键菜单 treeview是读取数据库的,在treeview任一节点上单击右键弹出菜单(我自己设置的内容:例如:"添加"."删除"."修改")一定要实现其功能啊!!!!急急急!!!!!!!!!!!!!!

jQuery中slideUp 和 slideDown 的点击事件_jquery

先贴代码,再讲详细事件 复制代码 代码如下: <!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <title></title>         <script src="js/jquery.js"></script>     </head>     <styl

jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解_jquery

当我们用javascript写ajax程序写得很"开心"的时候,突然有人告诉你有一种东西叫jquery,它会告诉你不直接和HttpRequest是多么的快乐,同时你再也不需要再烦恼纠结的ajax乱码问题,更幸福的是你的js代码将大大地简化,看完本文,你会发现,ajax,简单的来讲就是一句话的事情. 1.$.get $.get()方法使用GET方式来进行异步请求,它的语法结构为: $.get( url [, data] [, callback] ) 解释一下这个函数的各个参数: url:

jQuery中attr()与prop()函数用法实例详解(附用法区别)_jquery

本文实例讲述了jQuery中attr()与prop()函数用法.分享给大家供大家参考,具体如下: 一.jQuery的attr()方法 jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1. attr(属性名) //获取属性的值(取得第一个匹配元素的属性值.通过这个方法可以方便地从第一个匹配元素中获取一个属性的值.如果元素没有相应属性,则返回 undefined ) 2.

JQuery中Ajax的Post提交在IE下中文乱码的解决方法_AJAX相关

引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: 复制代码 代码如下: var regid = $('#oregion').combobox('getValue'); //var sname = $('#sname').val(); var sname = encodeURI($('#sname').val(),"UTF-8"); if(regid!=""&&regid!='und

jquery中val()方法是从最后一个选项往前读取的_jquery

在jquery中,val()方法是从最后一个选项往前读取,如果选项的value或者text中任意一项符合就会被选中 <select id="single"> <option>选择1号</option> <option>选择2号</option> <option value="选择2号">选择3号</option> </select> $("input:eq(0)

以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题_jquery

Promises是一种令代码异步行为更加优雅的抽象,它很有可能是JavaScript的下一个编程范式,一个Promise即表示任务结果,无论该任务是否完成. 在一些现代浏览器中已经提供了原生的Promise对象,其遵循Promise/A+标准.在jQuery1.5+,提供了$.Deferred(其可以被转化为promise对象).很多知名的框架中,也提供了promise对象.promise对象在javascript中已经是一种很重要的模式,它在解决异步问题时表现出的优雅,正是javascript

jQuery中each()、find()和filter()等节点操作方法详解(推荐)_jquery

1.each(callback) 官方解释: 返回值:jQuery 概述 以每一个匹配的元素作为上下文来执行一个函数. 意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素).而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型). 返回 'false' 将停止循环 (就像在普通的循环中使用 'break').返回 'true' 跳至下一个循环(就像在普通的循环中使用'