【回車】火狐瀏覽器回車觸發事件,提交了兩次查詢操作
阿新 • • 發佈:2018-12-16
在登入頁面使用了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查詢的問題了。