猿问

事件()函数在IE中不起作用

事件()函数在IE中不起作用

下面是我的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调试器时,我发现event对象没有preventDefault方法,该方法导致错误,因此正在提交表单。在Firefox(我使用Firebug发现的)情况下,该方法得到了支持。

有什么帮助吗?


交互式爱情
浏览 445回答 3
3回答

森栏

在IE中,您可以使用event.returnValue = false;达到同样的结果。为了避免出错,您可以测试是否存在防范性缺陷:if(event.preventDefault) event.preventDefault();你可以将两者结合起来:event.preventDefault ? event.preventDefault() : (event.returnValue = false);

斯蒂芬大帝

我知道这是一个相当老的职位,但我只是花了一些时间试图使这个工作在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的全局变量 event就像这样:$('a').on('click', function(event) {     if (window.event) {         window.event.returnValue = false;     }     event.preventDefault();});只是为了让那些试图说服IE8工作的人变得更容易。我希望IE8很快就会在痛苦的死亡中可怕地死去。最新情况:如SV in指出,你可以用event.originalEvent获取原始事件对象并设置returnValue原始属性中的属性。但我还没有在IE8中测试过它。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答