试图编写跨浏览器事件禁用js功能。怎么了?

时间:2012-01-18 20:31:05

标签: javascript javascript-events

我正在尝试编写自己的函数来阻止事件。

这是我的

function disableEvent (element, event, useCapture) {
function preventer (event) {
    event = event || window.event;
    event.preventDefault() ? event.preventDefault() : (event.returnValue = false);        
    event.stopPropagation() ? event.stopPropagation() : (event.cancelBubble = true);        
}    
if (typeof useCapture == 'undefined') useCapture = false;
    if (element.addEventListener)
        element.addEventListener(event.toLowerCase().substr(2), preventer, useCapture)
    else if (element.attachEvent) {
        var result = element.attachEvent(event,preventer);
        return result;
    }
    else {
        alert("Try to change or update your browser")
    }                        

}

但它在IE浏览器上不起作用。它在第4行显示错误。感谢您对此任务的帮助。最诚挚的问候,艾哈迈德。

1 个答案:

答案 0 :(得分:2)

当试图测试函数是否存在时,你写道:

event.stopPropagation() ? event.stopPropagation() : (event.cancelBubble = true);

让我们分析一下。 event.stopPropagation()是对没有参数的event.stopPropagation的调用,它不会返回任何内容,这意味着undefined。所以你将面临一个问题: 如果stopPropagation不存在,您仍然在调用它。它会产生错误,这就是你的情况。

要避免此问题,您必须检查该功能是否存在:

event.stopPropagation ? event.stopPropagation() : (even.cancelBubble = true);

它应该正常工作。与preventDefault相同。