2011-11-17 66 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事件时不显示警报。以较不干扰的方式显示您的消息。移除焦点会改变用户想要做的事情。 –