return false vs stopPropagation(), preventDefault(),stopImmediatePropagation()
传说return false作用很强大,不仅可以阻止事件冒泡,还可以阻止浏览器的默认行为,还可以减少ie系列的bug。今天就来说说return false
第一次用return false的时候是放在函数里面的,这样当函数作为if条件判断的时候,可以直接用return的返回值,因为返回的正好是个boolean值。还有个额外效果是,在return后面写的语句都不执行,因为在函数里面遇到return,就表示函数已经执行完。
第二次就是用在a作为按钮的时候,阻止浏览器的默认行为,也就是a链接的自动跳转。
术语简介:
那么什么是默认行为呢?就是浏览器会对一些元素默认给予一定的操作,比如a,input[type='submit']等等,默认行为是在事件绑定事件之后执行的,因为在刷新页面的时候,绑定事件就从历史记录里移出了,所以绑定事件要先执行(查看w3c)。
事件对象,event是事件函数触发产生的局部变量,随事件触发而产生,随事件结束而消失。
事件冒泡,就是当在dom结构中,子元素发生的事件,会沿着dom树神经一直传到document上,而不是单单只在本元素发生事件
所以,对于事件冒泡和浏览器的默认行为,作为事件对象,自然有他自己的处理方法,e.stopPropagation()和e.stopImmediatePropagation()都是用来阻止事件冒泡的。只是这两个方法有个区别,就是后面的方法不仅阻止了一个事件的冒泡,也把这个元素上的其他绑定事件也阻止了。而前者只是阻止一个绑定事件的冒泡,而不影响其他绑定事件执行。e.preventDefault()是用来阻止浏览器的默认行为的。
return false很强大,可以同时阻止事件冒泡和浏览器的默认行为。
那么你也许会问,既然有return false,那干嘛还有有其他的方法呢?这个嘛,事物既然存在就是有它的道理的。所以,当你需要阻止默认行为,但是又需要让他有事件冒泡行为的时候,你就不能用return false咯
参考:
http://api.jquery.com/event.stopImmediatePropagation/
http://css-tricks.com/return-false-and-prevent-default/
http://www.quirksmode.org/js/events_order.html
http://www.quirksmode.org/js/events_early.html
http://www.neoease.com/stoppropagation-and-preventdefault-and-return-false/