JavascriptonFocus事件在Google Chrome中持续触发-这是一个bug吗?
我编写了一个小javascript函数,在表单输入文本字段中触发onFocus时检查cookie 如果找到cookie,则会弹出一个对话框,欢迎此人返回站点 但在Chrome中,每次关闭一个对话框时,都会弹出一个新的对话框。我想这是因为文本字段在技术上仍然是“聚焦”的 但这个问题在Firefox或IE9中并不存在 我在Chrome中通过添加我目前评论的行解决了这个问题。但我想知道的是,如果这种行为被认为是一个错误或正常的行为,如果它是正常的,那么为什么其他浏览器的行为会有所不同 以下是javascript代码示例:JavascriptonFocus事件在Google Chrome中持续触发-这是一个bug吗?,javascript,google-chrome,Javascript,Google Chrome,我编写了一个小javascript函数,在表单输入文本字段中触发onFocus时检查cookie 如果找到cookie,则会弹出一个对话框,欢迎此人返回站点 但在Chrome中,每次关闭一个对话框时,都会弹出一个新的对话框。我想这是因为文本字段在技术上仍然是“聚焦”的 但这个问题在Firefox或IE9中并不存在 我在Chrome中通过添加我目前评论的行解决了这个问题。但我想知道的是,如果这种行为被认为是一个错误或正常的行为,如果它是正常的,那么为什么其他浏览器的行为会有所不同 以下是javas
//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();">
等等。当警报出现时,该字段将失去焦点(),当警报关闭时,chrome将焦点返回到输入,因此再次触发聚焦 其他浏览器可能会在关闭警报后将焦点交给窗口,因此onfocus不会再次触发。 我不会叫它虫子,这是一种不同的行为 解决方案:
在警报()之前移除焦点()我认为这是一个bug,因为
onfocus
应该在元素获得焦点时触发。它没有说“只要元素处于焦点”。与
onfocus`完全相反的是onblur
,它定义为当元素失去焦点时触发,并且onblur
只触发一次。我认为这也是一个bug。没有固定在铬17。也许你应该提交一份bug报告@谢尔曼先生,我不认为这是个错误。尝试使用console.log
而不是警报
,它会工作得很好,因为当警报“OK ed”时,Chrome会将焦点返回到输入
元素,以无休止的循环触发onfocus
事件处理程序。你真的这样做了吗?显示一个警告,上面写着“欢迎回到中情局总部”。这是个坏主意,除非你想让用户在网站上生气。嗯,是的,我正在显示它,此时用户被重定向到CIA.gov。我认为Amaan和Molle博士可能是对的,但事实是只有Chrome有这种行为。为什么Firefox和IE9不将焦点返回到输入字段并创建一个无限循环?+1:问题是正确的,但更好的解决方案是在处理onfocus事件时不显示警报。以较少干扰的方式显示消息。删除焦点会更改用户尝试执行的操作。如果您使用accesskey和onfocus属性从按钮或处理程序调用,则焦点行为可能会有点问题。Google Chrome开发人员可能会考虑验证调用方没有使用onfocus定义的accesskey,因为这很容易导致javascript对话框出现循环(alert/confirm/prompt)。正如Juan Mendes所提到的,避免使用javascript对话框会有所帮助,但这种行为会干扰accesskey功能,而accesskey功能在触发时直接与onfocus事件关联。