Javascript jQuery事件处理
如果在事件上(例如'click')为父元素绑定了一个函数,并为子DOM元素绑定了另一个处理函数,那么它们中的哪一个会被调用?如果它们都将被调用,那么它们被调用的顺序是什么?
发布于 2010-03-03 16:04:37
事件在DOM树中“向上”冒泡,所以如果您有一个元素及其父元素的处理程序,那么将首先调用子元素处理程序。
如果您为单个DOM元素上的事件注册了多个处理程序(例如,单个按钮注册了多个"click“处理程序),则这些处理程序将按照附加到元素的顺序进行调用。
您的处理程序可以做一些事情来改变它们完成后发生的事情:
使用传入的事件参数,调用event.preventDefault()
以防止任何“本机”操作发生
event.stopPropagation()
以防止事件在DOM树上冒泡
请注意,对于某些输入元素(复选框、单选按钮),处理方式有点奇怪。当您的处理程序被调用时,浏览器将已经将复选框“选中”值设置为与其先前值相反的值。也就是说,如果您有一个未选中的复选框,那么"click“处理程序将注意到,当调用" checked”属性时(在用户单击之后),它将被设置为"true“。但是,如果处理程序返回false,则单击操作实际上不会更改复选框值,而是保持未选中状态。因此,这就像浏览器在调用处理程序之前执行一半的“本机”操作(切换元素的"checked“属性),但是只有在处理程序没有返回false (或对事件对象调用"preventDefault()”)的情况下才真正更新元素。
发布于 2010-03-03 16:05:24
将首先调用子级,然后再调用父级。
当事件冒泡时,事件从子事件传递到父事件。在同一元素上,处理程序将按照绑定的顺序执行。
https://stackoverflow.com/questions/2372798
复制