【回车】火狐浏览器回车触发事件,提交了两次查询操作

版权声明:整理不易,转载请注明出处。 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查询的问题了。

猜你喜欢

转载自blog.csdn.net/linmengmeng_1314/article/details/84982749
今日推荐