大佬教程收集整理的这篇文章主要介绍了html重置后javascript事件丢失,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何防止事件处理程序从DOM中丢失时被垃圾回收?
我知道我可以重新分配click()函数,但由于我使用的是外部库(jquery ui),我真的不知道它对我的控件做了什么.我只是希望他们的事件恢复原样.
<div id="container"> <p>This container has a button,which will forget its click()...</p> <input id="TESTButton" type="button" value="Click Me!"/> </div> <script type="text/javascript"> $(function(){ $("#TESTButton").click( function(){ alert("Button has been clicked!"); }) }); </script> <div> <p>... when this button reseats html</p> <input id="actionbutton" type="button" value="Toggle"/> </div> <script type="text/javascript"> var toggle = false; var html; $(function(){ $("#actionbutton").click( function(){ toggle = !toggle; if(togglE){ html = $("#container").html(); $("#container").html(""); } else $("#container").html(html); }) }); </script>
这个jfiddle展示了我遇到的问题.
$(function(){ $("#TESTButton").live('click',function(){ alert("Button has been clicked!"); }) });
这是更新的小提琴:http://jsfiddle.net/mrchief/8S5E4/1/
说明:更改DOM时,还会删除附加元素的事件处理程序.使用.live将事件处理程序附加到“body”(并按DOM元素过滤),以便即使在删除/添加相同的DOM元素后它也“存在”.
使用.delegate也可以达到同样的效果:
$(function(){ $('#container').delegate('#TESTButton','click',function(){ alert("Button has been clicked!"); }) });
使用.delegate:http://jsfiddle.net/mrchief/8S5E4/6/
我建议使用.delegate over .live:
>您可以取消事件冒泡.当你使用live时,事件一直冒泡到body然后你的处理程序被调用,所以没有办法取消它的冒泡. (从jQuery 1.4开始,可以通过使用COntext参数来防止这种情况:http://api.jquery.com/live/)
>因为你特意附加了一个DOM元素,所以每次点击身体上的任何其他DOM元素时都不会调用它,因此它更具性能,因为它现在必须做更少的工作.
这是一篇精彩的文章,精美地解释了differences between live,delegate and bind,并讨论了每种方法的细微差别.感谢@Andyb指出这个链接.
以上是大佬教程为你收集整理的html重置后javascript事件丢失全部内容,希望文章能够帮你解决html重置后javascript事件丢失所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。