版权声明:整理不易,转载请注明出处。 https://blog.csdn.net/linmengmeng_1314/article/details/84982749
在登录页面使用了ajax提交请求,将登录名和密码传到后台验证,开始的回车触发事件的js是这样写的:
$("body").keydown(function() {
if (event.keyCode == 13) {//keyCode=13是回车键
login();
}
});
这样写在谷歌浏览器是可以正常使用的,但是在火狐浏览器里,回车键却不能正常触发回车事件。
百度之后换成另一种写法,火狐也兼容了,谷歌也能正常使用:
document.onkeydown=function(event)
{
e = event ? event : (window.event ? window.event : null);
if(e.keyCode==13){
login();
}
};
但是今天发现了一个问题:就是使用回车事件提交请求时,拦截器拦截了两次,数据库查询操作也是执行了两次,而直接点击提交按钮是正常的提交一次,查询一次。
使用回车触发,就提交了两次,并且第一次拦截还没结束时便开始了第二次拦截,然后执行两次controller方法里的打印和两次SQL的查询。
这个明显是不正常的,但是debug看了一下之后发现,在debug的过程当中,又变成一次了,如果再debug窗口多停留一会,又会执行查询好几次,然后报错,提示当前session值已存在,不能再次添加此用户的session,证明登录模块已经执行过了,但是还会再执行一遍也是很神奇了。。。。。。
虽然不知道是为什么这样,但是可以断定,问题是由于上面的js函数导致的,于是便试着再换一种写法:
在当前HTML页面的body里面添加一个函数
<body onkeydown="keyLogin()">
在body里加上下面的js即可
function keyLogin(){
var theEvent = window.event || arguments.callee.caller.arguments[0]; //谷歌能识别event,火狐识别不了,所以增加了这一句,chrome浏览器可以直接支持event.keyCode
var code = theEvent.keyCode;
if(code == 13){
login();
}
}
这样就解决了上面出现的拦截两次,执行两次SQL查询的问题了。