V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
remus
V2EX  ›  问与答

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

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

    真要替換整個文檔的內容,倒不如重新發請求
    remus
        12
    remus  
    OP
       2011-12-29 00:55:48 +08:00
    @honk 有哪些不同呢?
    mudkip
        13
    mudkip  
       2011-12-29 01:29:33 +08:00 via iPad
    修改 innerHTML 几乎相当于把里面的元素全部删了重来,所以其中的事件就不在了。jQuery live 方法大概是把事件绑定在 document 上,然后根据 target 判断所触发的元素吧,这样其中的元素的增删就不会影响事件。
    honk
        14
    honk  
       2011-12-29 09:55:06 +08:00
    @remus
    ajax最大的优势就是可以局部刷新;
    若替换整个文档内容的话,css, js等还是会重新请求和解析,而且还要额外处理事件代理;
    remus
        15
    remus  
    OP
       2011-12-29 18:05:27 +08:00
    又有问题了,对于event,用.live可以在替换内容后仍然生效,但像document.getElementById('testID') 这样的语句,却还是失效,这是为什么呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2820 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:22 · PVG 08:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.