Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavascriptonFocus事件在Google Chrome中持续触发-这是一个bug吗?_Javascript_Google Chrome - Fatal编程技术网

JavascriptonFocus事件在Google Chrome中持续触发-这是一个bug吗?

JavascriptonFocus事件在Google Chrome中持续触发-这是一个bug吗?,javascript,google-chrome,Javascript,Google Chrome,我编写了一个小javascript函数,在表单输入文本字段中触发onFocus时检查cookie 如果找到cookie,则会弹出一个对话框,欢迎此人返回站点 但在Chrome中,每次关闭一个对话框时,都会弹出一个新的对话框。我想这是因为文本字段在技术上仍然是“聚焦”的 但这个问题在Firefox或IE9中并不存在 我在Chrome中通过添加我目前评论的行解决了这个问题。但我想知道的是,如果这种行为被认为是一个错误或正常的行为,如果它是正常的,那么为什么其他浏览器的行为会有所不同 以下是javas

我编写了一个小javascript函数,在表单输入文本字段中触发onFocus时检查cookie

如果找到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();">


等等。

当警报出现时,该字段将失去焦点(),当警报关闭时,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事件关联。