为什么document.documentElement.innerHTML=newCotent之后,页面上的event全部失效呢?

2011-12-28 23:28:57 +08:00
 remus
如题。即使是newCotent===originalCotent,也不行
5156 次点击
所在节点    问与答
15 条回复
FuryBean
2011-12-28 23:34:57 +08:00
一个元素的子元素已经替换成其他元素了,其他元素不具备原来元素的事件。
daqing
2011-12-28 23:36:28 +08:00
如果用jQuery的话,在注册监听事件时,用live()函数就可以了。
benzhe
2011-12-28 23:41:14 +08:00
因为已经是不同的对象了
zythum
2011-12-28 23:46:27 +08:00
就好比,你有一只手表。来了个人把你替代了。那他还有木有你的手表呢,
remus
2011-12-28 23:49:11 +08:00
@zythum 如果他把我替代了,表摘下来带他手上。。。那他就有了-_-
remus
2011-12-28 23:49:25 +08:00
@daqing 我先试一下。。
zzNucker
2011-12-28 23:58:11 +08:00
re 2楼 要告诉jQuery绑定事件的对象可能在将来再添加
zythum
2011-12-29 00:04:14 +08:00
@daqing @zzNucker 貌似现在on就可以了。我上次草草看了下1.7的更新。
@remus 你给我把,我还缺个表。
remus
2011-12-29 00:14:19 +08:00
@zythum 我用的1.7.1,但只能用live,on不行。。。
ps:要拿手机照亮表看时间么?
remus
2011-12-29 00:15:03 +08:00
@daqing 多谢了!
honk
2011-12-29 00:18:27 +08:00
$(document).on('event', 'selector', function(){});

真要替換整個文檔的內容,倒不如重新發請求
remus
2011-12-29 00:55:48 +08:00
@honk 有哪些不同呢?
mudkip
2011-12-29 01:29:33 +08:00
修改 innerHTML 几乎相当于把里面的元素全部删了重来,所以其中的事件就不在了。jQuery live 方法大概是把事件绑定在 document 上,然后根据 target 判断所触发的元素吧,这样其中的元素的增删就不会影响事件。
honk
2011-12-29 09:55:06 +08:00
@remus
ajax最大的优势就是可以局部刷新;
若替换整个文档内容的话,css, js等还是会重新请求和解析,而且还要额外处理事件代理;
remus
2011-12-29 18:05:27 +08:00
又有问题了,对于event,用.live可以在替换内容后仍然生效,但像document.getElementById('testID') 这样的语句,却还是失效,这是为什么呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/24569

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX