sv_*_*_in 202 javascript events internet-explorer mootools preventdefault
以下是我的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', '');
}
});
});
Run Code Online (Sandbox Code Playgroud)
在IE以外的所有浏览器中,这都可以.但在IE中,这会导致错误.我有IE8所以在使用它的JavaScript调试器时,我发现该event
对象没有preventDefault
导致错误的方法,因此表单已经提交.在Firefox(我发现使用Firebug)的情况下支持该方法.
任何帮助?
Als*_*nde 467
在IE中,你可以使用
event.returnValue = false;
Run Code Online (Sandbox Code Playgroud)
达到同样的效果.
并且为了不出错,您可以测试preventDefault的存在:
if(event.preventDefault) event.preventDefault();
Run Code Online (Sandbox Code Playgroud)
你可以将两者结合起来:
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
Run Code Online (Sandbox Code Playgroud)
old*_*ard 23
如果通过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>
Run Code Online (Sandbox Code Playgroud)
对于所有jQuery用户,您可以在需要时修复事件.假设您使用HTML onclick =".."并获取缺少preventDefault()的IE特定事件,只需使用此代码即可获取它.
e = $.event.fix(e);
Run Code Online (Sandbox Code Playgroud)
之后e.preventDefault(); 工作良好.
小智 11
我知道这是一个很老的帖子,但我只是花了一些时间试图在IE8中完成这项工作.
IE8版本似乎存在一些差异,因为此处和其他线程中发布的解决方案对我不起作用.
假设我们有这个代码:
$('a').on('click', function(event) {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
});
Run Code Online (Sandbox Code Playgroud)
在我的IE8 preventDefault()
方法存在因为jQuery,但是不起作用(可能是因为下面的要点),所以这将失败.
即使我将returnValue
属性直接设置为false:
$('a').on('click', function(event) {
event.returnValue = false;
event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
这也行不通,因为我只是设置了jQuery自定义事件对象的一些属性.
只有对我有用的解决方案是设置全局变量的属性returnValue
,如下所示: event
$('a').on('click', function(event) {
if (window.event) {
window.event.returnValue = false;
}
event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
只是为了让那些试图说服IE8工作的人更容易.我希望IE8很快会在痛苦的死亡中死去.
更新:
正如sv_in指出的那样,您可以使用event.originalEvent
原始事件对象并returnValue
在原始对象中设置属性.但是我还没有在我的IE8中测试它.
Mootools在Event对象中重新定义preventDefault.所以你的代码应该适用于每个浏览器.如果没有,则mootools中的ie8支持存在问题.
你是否在ie6和/或ie7上测试了你的代码?
医生说
使用addEvent添加的每个事件都会自动获取mootools方法,而无需手动实例化它.
但如果没有,你可能想尝试
new Event(event).preventDefault();
Run Code Online (Sandbox Code Playgroud)
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
Run Code Online (Sandbox Code Playgroud)
在IE 9和Chrome上进行了测试。