以下是我的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发现的)的情况下得到支持。
任何帮助吗?
如果你通过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="..",并获得一个IE特定的事件,缺乏preventDefault(),只需使用这段代码来获得它。
e = $.event.fix(e);
之后e.preventDefault();工作很好。
在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中测试它。