1

是否有来自 Javascript 事件处理程序的跨浏览器方式来确定事件是否已被先前的处理程序取消?IE 和其他浏览器(如 Chrome 等)具有event.returnValue 可以测试的属性,但 FireFox 似乎没有任何此类属性。

这是我正在谈论的场景的示例。你有一个像这样的表格:

<form id="test" name="test" onsubmit="return false;" />

addEventListener然后你在 Javascript 中用/将一个事件连接到它attachEvent(为简洁起见,省略了连接)。该事件需要知道链中之前的任何内容是否返回 false 或以其他方式取消它。IE版本是这样的:

function onSubmitHandler(e) {
    alert("event was cancelled prior to this handler: " + e.returnValue);
}

这适用于 IE、Chrome 等,但当然不适用于 FireFox,因为它没有event.returnValue. 我已经在互联网上寻找任何其他方法来在 FireFox 中确定这一点,但一无所获。这个问题有没有不onsubmit直接设置表单属性的解决方案?

4

2 回答 2

0

我的理解是 event.returnValue 的主要用途是防止该事件的默认操作(即取消它)。例如,在像你上面这样的处理程序中:

function onSubmitHandler(e) {
    e.returnValue = false;
}

IE 中的上述代码将阻止默认操作,阻止提交表单。根据Gecko DOM Reference,Firefox 中的等效代码是:

e.preventDefault();

如果您想检查一个事件是否已被取消,并以跨浏览器的方式进行,是否可以选择使用jQuery之类的库?使用 jQuery 将函数绑定到表单的 onsubmit 事件并让该处理程序调用 .preventDefault() 将在所有受支持的浏览器中完成相同的事情。此外,您可以使用 jQuery 事件对象的 .isDefaultPrevented() 方法来确定该事件是否已被取消,大概是通过 lhs = e.returnValue 完成您尝试的操作。

于 2009-02-05T21:09:37.283 回答
0

这是解决这个问题的方法。我希望有一种符合标准的干净方法,但似乎没有。

function onSubmitHandler()
{
    // only called if the other onsubmit handlers succeed
}

// hook in submit
var originalOnSubmit = form.onsubmit;

form.onsubmit = function(e)
{
    var ret;

    if (originalOnSubmit)
        ret = originalOnSubmit();

    if (ret != false)
    {
        return onSubmitHandler(e);
    }
};
于 2009-02-12T16:28:18.527 回答