Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
JavaScript/DOM:如果焦点丢失到另一个窗口(应用程序),如何防止模糊事件_Javascript_Dom_Focus_Blur - Fatal编程技术网

JavaScript/DOM:如果焦点丢失到另一个窗口(应用程序),如何防止模糊事件

JavaScript/DOM:如果焦点丢失到另一个窗口(应用程序),如何防止模糊事件,javascript,dom,focus,blur,Javascript,Dom,Focus,Blur,如果用户点击该文档中的某个表单字段,我想显示HTML文档中的某些内容,如果用户离开该表单字段,我想隐藏该特定内容(通过激活另一个表单字段或单击页面上的其他位置) 我尝试使用焦点和模糊事件来实现这种行为。这在原则上是可行的,但存在一个问题:不仅当用户在同一文档中移动焦点时,而且当另一个窗口(可能来自不同的应用程序)被激活(获取焦点)时,会触发相应字段上的模糊事件 我怎么能避免呢?如果焦点转到其他应用程序(或其他浏览器窗口或选项卡),我不希望看到页面中的任何更改 多谢各位 使用if(document

如果用户点击该文档中的某个表单字段,我想显示HTML文档中的某些内容,如果用户离开该表单字段,我想隐藏该特定内容(通过激活另一个表单字段或单击页面上的其他位置)

我尝试使用焦点和模糊事件来实现这种行为。这在原则上是可行的,但存在一个问题:不仅当用户在同一文档中移动焦点时,而且当另一个窗口(可能来自不同的应用程序)被激活(获取焦点)时,会触发相应字段上的模糊事件

我怎么能避免呢?如果焦点转到其他应用程序(或其他浏览器窗口或选项卡),我不希望看到页面中的任何更改


多谢各位

使用
if(document.activeElement==this){return;}
保护模糊事件处理程序

下一步是防止在窗口恢复焦点时激活焦点事件处理程序。这可以使用一个小模式来完成:

function onFocus(e) {
    if ( this._isFocused ) { return; }
    this._isFocused = true;
    ...
}

function onBlur(e) {
    if ( document.activeElement === this ) { return; }
    this._isFocused = false;
    ...
}

将if(!document.hasFocus()){return;}添加到blur()手柄的顶部谢谢您的建议。我已经尝试过了,但不幸的是,当从blur处理程序中调用document.hasFocus()时返回true(我已将该处理程序附加到输入字段-这是错误的吗?);在处理程序的核心部分设置超时。我刚刚尝试过:如果我将模糊处理程序附加到窗口对象,您的第一个建议似乎有效!因此,我将尝试相应地更改处理程序(通过使用event.xxtargetxx属性应该是可行的)。如果我能让它工作,我明天会报告。还有一个问题:当我将模糊处理程序附加到文档对象(而不是窗口对象)时,在激活另一个应用程序的窗口时,它似乎会被调用两次。知道为什么会发生这种情况吗(在FF30/Win7中)?