`
xuedong
  • 浏览: 297744 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery的live绑定事件,不知道是不是jquery的bug

阅读更多

今天无意中发现,级联菜单中,select的onchange事件在ie8下调用了两次,而且下拉框中的数据有重复,记得以前测试这个功能是没有问题的。由于项目已经正式运营,不由的就出冷汗,脸色发白了。呵呵。由于js太多,不好查。一开始以为是有两个地方掉了。发现里边只有这一个地方写了个onchange基本可以排除这种可能,后来怀疑是不是什么地方递归了,把代码读了一下。基本可以排除这种可能。后来在火狐下试了一下,居然是好的。后来怀疑是兼容性问题。计划写个延迟事件,屏蔽掉一次算了。可是总有些不甘啊。后来在网上查了下,(还是技术不行),知道可以查看是什么地方调用了这个方法alert(callerDemo.caller.toString());可以查看是什么地方调用了这个方法。其中callerDemo是方法名。这下就感觉希望来了。alert一下后发现两次调用的居然是一样的。不免有些失望。后来看caller返回的是个对象。于是想到看他的父级是什么东西alert(callerDemo.caller.caller.toString());,这下就发现问题。两次调用的根源是不一样的。于是把别的js都删掉,这下就好了。最后排除到$(".search").live("change", function(){ });去掉它就可以了。可是调用的地方的class并不是这个的。将live改为bind就可以了。可是bind是不能绑定ajax后加载出来的内容的。哎,耗费了我几个小时查出来的。呵呵,跟大家分享下。文采不行。大家将就看吧。呵呵 

 

 

 

下面补充一下,一开始没看jquery1.4中live是不支持绑定change。

jy1245626认为bind和live都能绑定后加载的dom,我又测试了一下。bind不能绑定后加载的。下面是主要的测试代码。

 

<script type="text/javascript">
	$(document).ready(function(){
		$(".bindtest").bind("click",function(){
			alert('bind点击');
		});
		$(".livetest").live("click",function(){
			alert('live点击');
		});
	});
	function test(){
		$("#test2").append($('<a class="bindtest">bindtest2</a>'));
		$("#test2").append('<br/>');
		$("#test2").append($('<a class="livetest">livetest2</a>'));
	}
	</script>

 

 

 

 

<div id="test2">
		<a class="bindtest">bindtest</a><br/>
		<a class="livetest">livetest</a>
		<br/>
		<br/>
		<input type="button" onclick="test();" value="添加"/> 
		<br/>
		<br/>
		
	</div>

 

 

0
2
分享到:
评论
2 楼 xuedong 2011-09-06  
jy1245626 写道
bind为什么不能给动态的dom绑定事件?你试过吗?

bind的跟live都是为动态dom而生的!



呵呵,你这么一说我还真没底了,因为一直没试过。以前一直是看手册是那么写的。刚才测试了下。bind不能绑定后生成的。我把测试例子,放上去,不信你可以试下。
1 楼 jy1245626 2011-09-05  
bind为什么不能给动态的dom绑定事件?你试过吗?

bind的跟live都是为动态dom而生的!

相关推荐

    jquery中文版离线手册

    3. **事件处理**:jQuery统一了跨浏览器的事件处理,`click(function)`绑定点击事件,`bind('event', function)`绑定多种事件。 4. **链式操作**:jQuery对象方法返回的是jQuery对象本身,允许连续调用多个方法,如`...

    JQuery chm帮助文件(多个版本)

    5. **jQuery 1.7.1**: 这个版本引入了`.on()`和`.off()`事件处理方法,取代了之前的`.bind()`, `.live()`, `.delegate()`等,使得事件处理更加灵活且高效。 6. **jQuery 1.8.3**: 在1.8.x系列中,jQuery继续优化了...

    jquery-1.10.2.min.js

    3. **事件处理**:jQuery简化了事件绑定和解绑的过程,`$(selector).click(fn)`这样的语法使得添加事件监听器变得非常简单。同时,还提供了`.live()`, `.delegate()`, `.on()`等方法来处理动态加载的元素事件。 4. ...

    jquery1,8,3与jquery1.7.1

    1.7版本引入了一个重要的特性——jQuery.fn.on(),这是一个全新的事件绑定函数,替代了之前常用的`.bind()`, `.live()`, 和 `.delegate()`。`.on()`方法允许更灵活的事件处理,可以一次性绑定多个事件类型,并且支持...

    最全前端面试题-5(jquery篇-上百篇题集整理1个月)

    3. **事件处理**:Zepto不支持直接在对象上调用bind等事件绑定方法,需要创建一个DOM元素来作为事件的目标。jQuery则可以直接在对象上进行事件绑定。 4. **选择器支持**:Zepto使用Sizzle选择器引擎,与jQuery相同...

    jQuery中文参考手册

    `click(function)`为元素添加点击事件,`bind()`可以绑定多种事件,`live()`(在jQuery 1.7后被`on()`取代)处理动态添加的元素的事件。 4. **动画效果**:`slideUp()`, `slideDown()`, `fadeIn()`, `fadeOut()`等...

    jQuery1.7.2和jQuery1.8.2 中文版帮助文档

    这个版本引入了`.on()`方法,它是`.bind()`, `.live()`, `.delegate()`方法的综合,使得事件绑定更加灵活和高效。同时,$.ajax()方法的选项进行了扩展,增强了异步请求的控制能力。此外,jQuery1.8.2还优化了插件API...

    Jquery-1.11.3版本 jquery-1.11.3.rar

    事件处理如`.on()`, `.off()`提供了一致且灵活的事件绑定和解绑机制;而`.animate()`等动画函数则为网页动态效果的实现提供了便利。 2. **性能优化** jQuery 1.11.3版本在性能方面做了许多改进,包括更快的DOM遍历...

    jquery 1.5 到2.13 全套

    - on()方法:统一了事件绑定,取代了bind、live和delegate,提高了代码的可维护性。 - 模块化:jQuery开始采用模块化开发,为未来分离核心功能铺平道路。 4. jQuery 1.8与1.9:性能优化与API调整 - 性能提升:...

    各种的jQuery版本和1.7的文档

    - `.on()`事件绑定:`.on()`是jQuery 1.7中引入的新功能,它允许我们一次性绑定多种事件,支持动态生成的元素,同时兼容`.bind()`, `.live()`, 和 `.delegate()`的用法。这使得代码更简洁,维护性更强。 - 兼容性...

    Jquery 1.6.4 js And Jquery 1.4 API 中文

    4. **事件处理**:修复了与事件相关的bug,如冒泡和事件处理程序的绑定和解绑问题。 5. **浏览器兼容性**:jQuery 1.6.4 支持所有主流浏览器,包括 IE6+、Firefox、Chrome、Safari 和 Opera,确保在不同平台上的...

    jquery1.9文件以及api

    jQuery 1.9 中移除了一些过时的 API,如 `.live()` 方法,这个方法在之前版本中用于为动态添加的元素绑定事件,但由于性能和设计上的问题被 `.on()` 方法所取代。`.on()` 方法不仅能够处理动态元素,还提供了更多的...

    jquery1.4.1

    例如,`.live()`函数的改进,使其支持事件冒泡,允许开发者为动态添加的元素绑定事件,这对于动态内容丰富的Web应用尤为重要。另外,`$.proxy()`函数的引入,使得可以更方便地设置事件处理函数的作用域,避免了`var ...

    JQuery1.3.1和1.3.2库

    同时,1.3.1版本改进了事件处理机制,支持更多的事件绑定方式,如`.live()`方法,可以为未来创建的元素绑定事件。此外,这个版本还加强了AJAX操作,提供了更灵活的数据获取和传输选项。 JQuery 1.3.2 是紧接着1.3.1...

    jquery 手册 1.7 1.8 1.82 版本 方便携带 绿色无毒 解压即可

    1.3 事件处理:jQuery简化了事件绑定和触发,如`$(selector).click(function() {...})`用于绑定点击事件,`$(selector).trigger('click')`则可触发事件。 二、jQuery动画 2.1 动画效果:jQuery的`.animate()`方法...

    jquery-1.9.1.js

    例如,移除了`.live()`方法,鼓励开发者使用`.on()`来绑定事件,这使得事件处理更加灵活和高效。此外,1.9.1版本修复了许多已知的bug,确保了库的稳定性。 其次,`jquery-ui-1.10.2.custom.js`是jQuery UI库的一个...

    jquery各个版本

    - jQuery 1.3(2009年):增强了性能,特别是DOM操作速度的提升,同时增加了live()方法,支持动态元素的事件绑定。 - jQuery 1.4(2010年):优化了代码,修复了许多bug,改进了浏览器兼容性,使jQuery更加稳定。 ...

    jQuery1.7.1-1.9.0各版本

    jQuery是世界上最流行的JavaScript库之一,它极大地简化了JavaScript的DOM操作、事件处理、动画制作以及Ajax交互。在本文中,我们将深入探讨jQuery的1.7.1至1.9.0这几个版本之间的关键变化和改进,帮助开发者了解...

    jquery 1.2 和1.3 源代码

    例如,`live()`方法的引入解决了动态内容的事件绑定问题,而性能的优化则使jQuery在大型项目中的表现更加出色。此外,1.3版本还修复了一些已知的bug,提升了整体的稳定性和兼容性。 总结,通过对比分析jQuery 1.2和...

    官网下载的JQuery1.6.2--jquery-1.8.3所有版本

    1.7版本引入了`.on()`方法来统一事件绑定;1.8则对一些过时的方法进行了弃用,比如`.live()`。 6. **选择版本**:在实际项目中,应根据项目需求和浏览器兼容性选择合适的jQuery版本。较新版本通常提供更多的特性和...

Global site tag (gtag.js) - Google Analytics