以下是我的JavaScript (mootools)代码:

$('orderNowForm').addEvent('submit', function (event) {
    event.preventDefault();
    allFilled = false;
    $$(".required").each(function (inp) {
        if (inp.getValue() != '') {
            allFilled = true;
        }
    });

    if (!allFilled) {
        $$(".errormsg").setStyle('display', '');
        return;
    } else {
        $$('.defaultText').each(function (input) {
            if (input.getValue() == input.getAttribute('title')) {
                input.setAttribute('value', '');
            }
        });
    }

    this.send({
        onSuccess: function () {
            $('page_1_table').setStyle('display', 'none');
            $('page_2_table').setStyle('display', 'none');
            $('page_3_table').setStyle('display', '');
        }
    });
});

在除IE之外的所有浏览器中,这都可以正常工作。但在IE中,这会导致错误。我有IE8,所以在使用它的JavaScript调试器时,我发现事件对象没有preventDefault方法,这是导致错误的,所以表单被提交。该方法在Firefox(我是使用Firebug发现的)的情况下得到支持。

任何帮助吗?


当前回答

在IE9之后禁用一个键盘键,使用:e.f preventdefault ();

在IE7/8下禁用常规键盘键,使用:e.returnValue = false;或者返回false;

如果你试图禁用键盘快捷键(使用Ctrl,如Ctrl+F),你需要添加这些行:

try {
    e.keyCode = 0;
}catch (e) {}

以下是仅针对IE7/8的完整示例:

document.attachEvent("onkeydown", function () {
    var e = window.event;

    //Ctrl+F or F3
    if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
        //Prevent for Ctrl+...
        try {
            e.keyCode = 0;
        }catch (e) {}

        //prevent default (could also use e.returnValue = false;)
        return false;
    }
});

参考:如何禁用IE7 / IE8中的快捷键

其他回答

我知道这是一个相当老的帖子,但我只是花了一些时间试图使这个工作在IE8。

IE8版本似乎有一些不同,因为在这里发布的解决方案和其他线程都不适合我。

假设我们有这样的代码:

$('a').on('click', function(event) {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
});

在我的IE8 preventDefault()方法存在,因为jQuery,但不工作(可能是因为下面的点),所以这将失败。

即使我直接将returnValue属性设置为false:

$('a').on('click', function(event) {
    event.returnValue = false;
    event.preventDefault();
});

这也不会工作,因为我只是设置了一些属性的jQuery自定义事件对象。

唯一适用于我的解决方案是设置属性returnValue的全局变量事件像这样:

$('a').on('click', function(event) {
    if (window.event) {
        window.event.returnValue = false;
    }
    event.preventDefault();
});

只是为了让那些试图说服IE8工作的人更容易理解。我希望IE8很快就会在痛苦中死去。

更新:

正如sv_in指出的,可以使用event。originalEvent获取原始事件对象并在原始事件对象中设置returnValue属性。但是我还没有在我的IE8中测试它。

在IE9之后禁用一个键盘键,使用:e.f preventdefault ();

在IE7/8下禁用常规键盘键,使用:e.returnValue = false;或者返回false;

如果你试图禁用键盘快捷键(使用Ctrl,如Ctrl+F),你需要添加这些行:

try {
    e.keyCode = 0;
}catch (e) {}

以下是仅针对IE7/8的完整示例:

document.attachEvent("onkeydown", function () {
    var e = window.event;

    //Ctrl+F or F3
    if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
        //Prevent for Ctrl+...
        try {
            e.keyCode = 0;
        }catch (e) {}

        //prevent default (could also use e.returnValue = false;)
        return false;
    }
});

参考:如何禁用IE7 / IE8中的快捷键

FWIW,如果有人重新审视这个问题以后,你也可以检查你正在处理你的onKeyPress处理函数。

当我错误地传递onKeyPress(this)而不是onKeyPress(event)时,我遇到这个错误。

只是要查点别的。

在IE中,你可以使用

event.returnValue = false;

达到同样的效果。

为了不得到一个错误,你可以测试是否存在preventDefault:

if(event.preventDefault) event.preventDefault();

你可以将两者结合起来:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

在IE 9和Chrome上测试。