为什么document.documentElement.innerHTML=newCotent之后,页面上的event全部失效呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
remus
V2EX    问与答

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

  •  
  •   remus 2011-12-28 23:28:57 +08:00 5877 次点击
    这是一个创建于 5085 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题。即使是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     Solana     822 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:20 PVG 06:20 LAX 14:20 JFK 17:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86