1. 程式人生 > >【回車】火狐瀏覽器回車觸發事件,提交了兩次查詢操作

【回車】火狐瀏覽器回車觸發事件,提交了兩次查詢操作

在登入頁面使用了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查詢的問題了。