继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

js无法捕捉dom中由ajax动态加载的html元素

这个名字没人起
关注TA
已关注
手记 271
粉丝 19
获赞 92

使用了jquery库

具体的html 这边就不展示了,大概做一个范例介绍

html 文件内容:

<script type="text/javascript" src="path/to/jquery.js"></script>

<div id="tid">

<a href="#" class="del">Delete</a>

</div>

<script>

$(function(){

$('#tid a.del').click(function(){

alert('fk');// 弹出提示信息

$('#tid').html('<a href="#" class="del">New Delete</a>');//这边就不用ajax了,直接动态修改 div#tid 下的html

return false;

});

});

</script>

保存并执行如上代码,会发现,点击Delete 之后,Div内容确实更新了,但是点击 New Delete时 没有弹出 fk 提示信息,说明更新原dom后,新加入的html不受原页面的js控制

对于我这样的菜鸟来说,是一个很棘手的问题。最蛋疼的是,你必须解决它,至于涉及到的用途这边就不废话了。

初步思路,直接写成js 静态方法 包含 到动态加载的html中。。。。这样做似乎页面源码会显得很乱,也很不方便维护,所以就没有尝试,这边也就无法提供修改后的示例代码了。

思路二,jQuery就没有集成相关的方法么?于是菜弟只能向谷哥度娘求助了,大肆搜罗一番(ps:这个搜索关键词还真不好描述),很多内容情况都不太一样,最终在stackflow上发现了 jQuery.live()的踪迹,测试一番 可行,修改后的js如下:

$(function(){

$('#tid a.del').live('click',function(){

alert('fk');// 弹出提示信息

$('#tid').html('<a href="#" class="del">New Delete</a>');//这边就不用ajax了,直接动态修改 div#tid 下的html

return false;

});

});

至于这其中的来龙去脉,就不误导大家了,有需要的可以参考jQuery的相关手册。

(ps:同事的UI用的是jquery1.7.2版)顺便测了一下新版本的jQuery v1.10.2,结果firebug直接报错 ...live(... is not a function ,看来是新版本的jquery重构了相关方法,再搜索

发现自jquery 1.9开始 live方法就被移除了,但是我们可以用on方法替代,需要注意的是这两个方法不太一样,需要进行些小改动,重新改写后的js如下:

$(function(){

$('#tid').on('click','a.del',function(){

alert('fk');// 弹出提示信息

$('#tid').html('<a href="#" class="del">New Delete</a>');//这边就不用ajax了,直接动态修改 div#tid 下的html

return false;

});

});

这边是jquery官方的一些说明(http://jquery.com/upgrade-guide/1.9/#live-removed)

$("a.foo").live("click", fn), for example, you can write$(document).on("click", "a.foo", fn)

on相关的具体使用方法请参见说明手册

好了,就记到这边 :)

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP