在调用窗口模糊(浏览器失去焦点)时避免元素模糊处理程序
Avoid element blur handler when window blur invoked (browser loses focus)
阐述这个问题:
我有一个元素,单击时会收到一个子元素。该子元素被赋予一个模糊处理程序。
我希望在浏览器失去焦点(窗口模糊)时不调用该处理程序。
为了实现这一目标,我尝试了几种策略,这是我目前的努力:
function clicked() {
// generate a child element
...
field = $(this).children(":first");
$(window).blur(function () {
field.unbind("blur");
});
$(window).focus(function () {
field.focus();
field.blur(function () {
save(this);
});
});
field.blur(function () {
save(this);
});
}
这行不通。似乎正在发生的事情是,当浏览器失去焦点时,该字段首先失去焦点。
好问题!
这是可能的,而且相当简单。
field.blur(function() {
if(document.activeElement !== this) {
// this is a blur that isn't a window blur
}
});
JSFiddle
或者在香草 JS 中:
field.addEventListener('blur', function() {
if(document.activeElement !== this) {
// this is a blur that isn't a window blur
}
});
编辑:虽然你的答案涉及浏览器失去焦点,但要知道Firefox在返回焦点时有不受欢迎的行为(错误?如果您聚焦了输入,然后取消了窗口的焦点,则会触发元素的模糊(这就是问题的内容)。如果返回到输入以外的其他内容,则会再次触发模糊事件。
执行此操作的一种温和肮脏的方法可能是在采取行动之前使用setTimeout()
。
var windowFocus;
$(window).focus(function() {
windowFocus = true;
});
$(window).blur(function() {
windowFocus = false;
});
function clicked() {
// generate a child element
...
field = $(this).children(":first");
field.blur(function () {
setTimeout(function() {
if (windowFocus) {
save(this);
}
}, 50);
});
}
相关文章:
- 将事件聚焦/模糊在可编辑内容的元素上
- 如何将运动模糊尾巴添加到圆圈中的 svg 元素
- JQuery无法将模糊事件绑定到所有<输入>页面中的元素
- 当移除子元素时,我得到一个错误;模糊”;事件
- 聚焦和模糊错误元素触发的事件
- 当发生模糊事件时,如何在元素上备份选定的文本
- 模糊 DOM 元素时会发生什么
- 如果单击焦点元素的子元素,则会在获得焦点的父元素上触发模糊事件
- 在调用窗口模糊(浏览器失去焦点)时避免元素模糊处理程序
- 隐藏元素对焦并显示模糊
- 对除元素以外的主体应用模糊
- j查询模糊/聚焦未在动态添加的元素上触发
- 处理通过聚焦在子元素上并通过单击子元素外部触发的父元素的模糊事件
- 如果新关注的元素不是子元素,则jQuery模糊
- 如何使用滚动模糊元素,直到它'It’模糊到一定程度
- 如何在javascript中从焦点模糊事件中获取元素值
- 模糊匹配元素内的文本到时间字符串
- AngularJS-未触发要模糊的绑定元素
- jQuery -删除模糊元素,但捕捉点击他的孩子
- 模糊元素及其父元素,在元素的模糊处理程序运行之前