event.preventDefault() 函数在 IE 中不起作用

IT技术 javascript internet-explorer events mootools preventdefault
2021-01-14 15:52:10

以下是我的 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 发现)。

任何帮助?

6个回答

在 IE 中,您可以使用

event.returnValue = false;

达到相同的结果。

并且为了不报错,你可以测试是否存在 preventDefault:

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

您可以将两者结合使用:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
event.preventDefault();出于某种原因,我突然停止在 FireFox 中为我工作。使用了 mority 的代码,效果很好。谢谢~
2021-03-19 15:52:10
event.preventDefault ? event.preventDefault() : event.returnValue = false;
2021-04-04 15:52:10
值得注意的是,“event”必须是IE8中的全局事件对象。您不能使用传递给事件处理程序的事件,例如 e.preventDefault,它必须是 event.preventDefault 才能在 IE8 中工作。
2021-04-07 15:52:10
只是为了让@jmort253 的评论更加清晰: $('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
2021-04-07 15:52:10
以下代码对我有用: if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; }
2021-04-08 15:52:10

如果您通过 mootools 的 addEvent 函数绑定事件,您的事件处理程序将获得作为参数传递的固定(增强)事件。它将始终包含 preventDefault() 方法。

试试这个小提琴,看看事件绑定的区别。 http://jsfiddle.net/pFqrY/8/

// preventDefault always works
$("mootoolsbutton").addEvent('click', function(event) {
 alert(typeof(event.preventDefault));
});

// preventDefault missing in IE
<button
  id="htmlbutton"
  onclick="alert(typeof(event.preventDefault));">
  button</button>

对于所有jQuery用户,您可以在需要时修复事件。假设您使用 HTML onclick=".." 并获取缺少 preventDefault() 的 IE 特定事件,只需使用此代码即可获取它。

e = $.event.fix(e);

之后 e.preventDefault(); 工作正常。

您是否再次将固定事件分配给 e 变量?
2021-03-18 15:52:10
它可能已从 jquery 2 中删除?但是 IE10 不需要修复。
2021-03-19 15:52:10
不幸的是,这个技巧对我不起作用。我正在使用 IE 10 并且在调用 e.preventDefault() 之前;我打电话给 $.event.fix(e); 没有成功:(
2021-03-24 15:52:10

我知道这是一篇很老的帖子,但我只是花了一些时间试图在 IE8 中完成这项工作。

IE8 版本似乎存在一些差异,因为此处和其他线程中发布的解决方案对我不起作用。

假设我们有这样的代码:

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

在我的 IE8preventDefault()方法中,由于 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 中测试过它。

您还可以从 获取原始浏览器事件对象event.originalEvent更多信息:stackoverflow.com/a/16675056/22550
2021-03-24 15:52:10

Mootools 重新定义了 Event 对象中的 preventDefault。所以你的代码应该在每个浏览器上都能正常工作。如果没有,则说明 mootools 中的 ie8 支持存在问题。

您是否在 ie6 和/或 ie7 上测试过您的代码?

医生说

使用 addEvent 添加的每个事件都会自动获取 mootools 方法,无需手动实例化它。

但如果没有,你可能想尝试

new Event(event).preventDefault();
在 IE 中这样包装时也有一些问题。我的天啊!为什么是IE?
2021-03-22 15:52:10
不过,她不想停止该事件,只是阻止其默认操作。
2021-03-26 15:52:10
if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

在 IE 9 和 Chrome 上测试。

在 IE 11 中不起作用(e.preventDefault 是一个函数,虽然它似乎没有做任何事情)
2021-03-16 15:52:10