关于live方法和on方法在使用event.stopPropagation()上的区别

  (1)      $('ul').live('click',function(ev){
            console.log(event)
            event.stopPropagation()
            ev.stopPropagation()
            
        })
        $('.fa').live('click',function(ev){
            console.log('ass')

        })
    (2)    $('ul').on('click',function(ev){
            console.log(event)
            event.stopPropagation()
            console.log(ev.isPropagationStopped())//false
            
        })
        $('.fa').on('click',function(ev){
            console.log('ass')

        })

由于我写代码时候的大意把参数里的ev写成event了导致没有阻止事件的冒泡,可是测试中我发现如果我把live方法换成on方法后再用event.stopPropagation()来阻止事件竟然成功了。但是ev.isPropagationStopped()返回来的是false,问一下懂得大神们在事件处理函数中直接用event对象和用参数里的event对象(ev)有什么区别。。

阅读 1.9k
1 个回答

1.live()是将事件委托到document上,无法阻止事件冒泡,event.stopPropagation()无效(因为执行live()的时候已经在document上冒泡了),所以被Jquery1.7弃用
2.

 $('ul').on('click',function(ev){
            console.log(event)
            event.stopPropagation() 
            console.log(ev.isPropagationStopped())//false
            
})

event为window.event,是全局属性。ev是触发click后回调函数的事件对象。早期由于考虑到旧版本ie只有window.event,firefox只支持事件通过参数传入,会做兼容处理

element.onclick=function(ev){
    ev=ev | window.event;
    ....
}

jquery的on()已经做了兼容处理,所以不需要window.event,尽量用作为参数的事件对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题