0

我有一些大规模嵌套的 GUI 控件——当它们被单击或更改时,或者我需要阻止事件在 DOM 树中进一步上升时。它需要适用于所有浏览器。

在这一点上,我有一些相当笨重的 JS 代码:

//Do something in response to the original user action
//Leave it at that.
try {
        e.stopPropagation();
    }
    catch (ex) {

    }
    try {
        event.cancelBubble();
    }
    catch (ex) {

    }

    try {
        event.preventDefault();
    }
    catch (ex) { }
...

这确实有效,但它闻起来感觉不对(我个人讨厌空的 catch 块)。我可以使用更简洁的 x 浏览器技巧吗?

4

2 回答 2

5

如果您使用 jQuery,那么就event.stopPropagation()可以正常工作。jQuery 统一了事件处理。

一般来说,如果你想测试特殊的浏览器方法,你可以这样做:

if(event.stopPropagation) {
    event.stopPropagation();
}
else if...

这就是 jQuery 正在做的事情。它为事件创建一个包装器并提供一个统一的接口。

事件对象的名称由定义。事件对象作为第一个参数传递给您的事件处理程序。您必须设置事件处理程序以接受参数,例如:

$('selector').click(function(foo) { // could be event, e, bar, whatever you want
    foo.stopPropagation();
});

通常 e使用或event使用。

于 2011-02-24T11:33:03.593 回答
3

cancelBubble是布尔属性而不是Event对象的方法。不需要 try/catch,因为您可以在使用之前测试所需的属性或方法。因此,如果没有 jQuery,以下内容将为事件对象执行您想要的操作e

if (typeof e.stopPropagation != "undefined") {
    e.stopPropagation();
} else if (typeof e.cancelBubble != "undefined") {
    e.cancelBubble = true;
}
于 2011-02-24T11:41:08.307 回答