事件取消

    注册为 properties 的事件处理器的返回值可以被用于取消事件的默认动作。在支持 addEventListener() 的浏览器中,你也可以调用事件对象的 preventDefault() 方法来取消事件的默认动作。IE 9 之前,是将事件对象的 returnValue 属性设置为 false。The following code shows a dummy event handler that uses all three cancellation techniques:

    function cancelHandler(event) {

        var event = event || window.event; // for ie

        /* Do something to handle the event here */

        // Now cancel the default action associated with the event

        if (event.preventDefault) event.preventDefault(); // Standard technique

        if (event.returnValue) event.returnValue = false; // IE

        return false; // For handlers registered as object properties

    }

    当前的 DOM 事件模块草案定义了事件对象的一个属性叫 defaultPrevented。它还没被广泛支持,但意图是该属性将会通常为 false,但如果调用了 preventDefault() 后它就会变为 true。

    取消一个事件所关联的默认动作只是一种事件取消。我们还可以取消事件的传播。支持 addEventListener() 的浏览器中,你可以调用事件对象的 stopPropagation() 方法。如果在同一个对象上还有其他处理器,这些处理器是仍然会被调用的,但调用了 stopPropagation() 后,其他对象上的事件处理器就不会被调用了。stopPropagation() 方法可以在事件传播过程中的任何时候被调用。

    IE 9 之前,IE不支持 stopPropagation() 方法。相反,IE 事件对象有一个属性叫 cancelBubble。将它设为 true 就可以阻止任何进一步的传播了。(IE 8 以及之前的版本不支持事件传播的捕捉阶段,因此冒泡是它的唯一一种可以被取消的传播)。

    当前的草案 DOM 事件规范定义了事件对象上的另一个方法,叫 stopImmediatePropagation()。像 stopPropagation() 一样,该方法阻止事件传播到任何其他对象。但它还会阻止注册在同一个对象上的任何其他事件处理器。在写本书时,一些浏览器已经支持,但其他还不支持。一些工具库,如 jQuery 和 YUI,以跨平台的方式定义了 stopImmediatePropagation。

你可能感兴趣的:(returnvalue,stopPropagation,preventDefault)