2011-11-17 71 views
2

我寫了一個小的javascript函數,它在表單輸入文本字段中觸發onFocus時檢查cookie。Javascript onFocus事件不斷在Google Chrome中觸發 - 它是一個錯誤嗎?

如果找到了cookie,那麼會彈出一個對話框,歡迎該人員返回該網站。

但是在Chrome中,每次關閉對話框時都會彈出一個新對話框。我想這是因爲文本字段在技術上仍然「聚焦」。

但是,在Firefox或IE9中不會發生此問題。

我在Chrome中解決了這個問題,添加了我目前評論的內容。但是我想知道的是,如果這種行爲被認爲是一個錯誤或正常行爲,並且如果它是正常的,那麼爲什麼其他瀏覽器的行爲有所不同?

下面是javascript代碼示例:

//var checked = 0; 
var checkIt = getCookie('cia_db'); 
function checkCookie() { 

// if(checked == 0) { 

     if(checkIt == 'logged_in') { 
      alert('Welcome back to CIA headquarters.'); 
      //return true; 
     } 
    //} 
     //checked++; 
} 

而這裏的HTML:

<form id="form1" name="form1" action="" method="get"> 
<input type="text" name="username" id="username" value="smeegle" size="15" onfocus="checkCookie();"> 

等等

+0

我會認爲這是一個錯誤,因爲'onfocus'應該火'當一個元素獲得focus'警報()之前刪除的焦點。它沒有說'只要一個元素在焦點上'。與'onfocus'相反的是'onblur',它被定義爲「元素失去焦點時觸發」,而「onblur」只觸發一次。 – xbonez

+0

我認爲這也是一個bug。在Chrome 17中沒有修復。也許你應該提交一個錯誤報告。 http://jsfiddle.net/x2Zvz/ – mrtsherman

+0

@mrtsherman我不會稱這是一個錯誤。嘗試使用'console.log'而不是'alert',它可以很好地工作,因爲當警報是'okay-ed'時,Chrome會將焦點返回到'input'元素,並在無窮無盡的情況下觸發'onfocus'事件處理程序循環。 –

回答

3

警報出現時,現場將失去焦點() ,當警報關閉時,chrome會將焦點重新輸入到輸入中,因此onfocus會再次觸發。

關閉警報後,其他瀏覽器可能會將焦點對準窗口,因此onfocus將不會再次觸發。 我不會稱之爲錯誤,這是一種不同的行爲。

解決方案:

+1

+1:您正確地發現了問題,但更好的解決方案是在處理onfocus事件時不顯示警報。以較不干擾的方式顯示您的消息。移除焦點會改變用戶想要做的事情。 –