URL在这里:http://prorankstudios.com/sandbox/wtf/
使用IE9,将焦点放在"用户"或"通行证"字段上,按ENTER键。。。
请注意,整个页面将重新加载。
发生的情况是,#live_site_link的点击处理程序(分配在common.js的第30行)正在运行,而#live_ste_link上根本没有点击。。。
登录提交代码:
Login.Submit = function(e)
{
Login.feedback.empty();
if (Login.user.val() == '')
{
Camo.ErrorAlert('Invalid username.',Login.feedback);
Login.user.focus().select();
return false;
}
if (Login.pass.val() == '')
{
Camo.ErrorAlert('Invalid password.',Login.feedback);
Login.pass.focus().select();
return false;
}
Camo.AJAXStart('Logging in...');
postData =
{
user:Login.user.val(),
pass:Login.pass.val()
}
Camo.AJAXPost('index/login/',Login.Success,Login.Failure,postData);
return false;
}
live_site_link点击处理程序:
$('#live_site_link').click(function()
{
window.location.href = './';
});
事实上,登录表单的处理程序(分别在login.js第22行和第24行中分配的keyup和click-on-Go按钮)有时会在页面重新加载后运行,这很奇怪。
在IE7/兼容模式下,login_submit的keyup和click处理程序正常工作,页面不会重新加载。在我测试的所有其他浏览器中也是如此。
IE9在做什么?
在Login.SubmitOnEnter
中返回false之前,尝试调用e.preventDefault()
或e.stopPropagation()
不过,如果您在表单元素周围包装一个表单,然后为表单提交附加一个事件,那会更好。这样一来,它在没有javascript的情况下仍然可以工作,并且您不必为点击并输入按键设置单独的事件。
除了将实时站点链接按钮更改为常规锚标记之外,我能想到的唯一"解决方案"实际上是将登录字段和按钮包含在表单标记中。
显然,在没有这些封闭的表单标签的情况下,IE9使用live_site_link按钮而不是GO按钮在自然回车键按下时提交表单,然后登录表单的输入上的keyup处理程序和GO按钮上的点击处理程序才有机会触发,这会导致页面重新加载(这就是live_site-link的点击处理器所做的)。
现在我必须在没有AJAX的情况下处理登录。。。
通过使用提交处理程序,您可能会更容易地管理登录提交过程,而不需要捕获回车键并使其单击提交按钮。看起来像是额外的代码,以一种更简单的方式完成
$('form').submit(function(){
var valid=someValidionFunction();
return valid;
})
由于没有ajax 而编辑