我真的在寻找适用于所有当前流行浏览器(IE9、Chrome、Firefox、Safari)以及一直到 IE8 的东西。
虽然,我一直在寻找一种在 Flash 移动对象失去焦点后设置焦点的方法,但我发现所有这样做的历史方法都失败了。我认为这是另一个安全问题。
所以,我现在正在寻找如何监视 document.activeElement 的某种更改事件(尽管“更改”并没有真正发生)。
我真的在寻找适用于所有当前流行浏览器(IE9、Chrome、Firefox、Safari)以及一直到 IE8 的东西。
虽然,我一直在寻找一种在 Flash 移动对象失去焦点后设置焦点的方法,但我发现所有这样做的历史方法都失败了。我认为这是另一个安全问题。
所以,我现在正在寻找如何监视 document.activeElement 的某种更改事件(尽管“更改”并没有真正发生)。
虽然@James 上面的回答是正确的。我添加了更多细节,使其成为一个完全可行的解决方案以及focus
事件的使用。
<html>
<body>
<input type="text" id="Text1" name ="Text1" value=""/>
<input type="text" id="Text2" name ="Text2" value=""/>
<SELECT><OPTION>ASDASD</OPTION><OPTION>A232</OPTION></SELECT>
<INPUT TYPE="CHECKBOX" id="Check1"/>
<INPUT type="TEXT" id="text3"/>
<input type="radio"/>
<div id="console"> </div>
<textarea id="textarea1"> </textarea>
<script>
var lastActiveElement = document.activeElement;
function detectBlur() {
// Do logic related to blur using document.activeElement;
// You can do change detection too using lastActiveElement as a history
}
function isSameActiveElement() {
var currentActiveElement = document.activeElement;
if(lastActiveElement != currentActiveElement) {
lastActiveElement = currentActiveElement;
return false;
}
return true;
}
function detectFocus() {
// Add logic to detect focus and to see if it has changed or not from the lastActiveElement.
}
function attachEvents() {
window.addEventListener ? window.addEventListener('focus', detectFocus, true) : window.attachEvent('onfocusout', detectFocus);
window.addEventListener ? window.addEventListener('blur', detectBlur, true) : window.attachEvent('onblur', detectBlur);
}
attachEvents();
</script>
</body>
</html>
似乎您可以结合使用捕获焦点/模糊和焦点输入/焦点输出 (IE) 事件。可能是这样的:
window.addEventListener ?
window.addEventListener('blur', blurHappened, true)
: window.attachEvent('onfocusout', blurHappened);
function blurHappened() {
console.log('document.activeElement changed');
}
onfocusout
会捕捉到冒泡的“模糊”,而常规blur
会addEventListener
捕捉“模糊”。
您可能需要在blurHappened
. 我不确定,因为我没有测试过。
根据我的经验,关于跨浏览器问题的最佳信息来源是 Quirksmode。这是“明显”(但不可用)选项的链接——焦点和模糊事件。
http://www.quirksmode.org/dom/events/blurfocus.html
奇怪(并且令人惊讶)是基于 Webkit 的浏览器是这里美中不足的地方。
另一种选择是使用间隔计时器来检查 activeElement 是否已更改为您的唯一选项或作为焦点/模糊的备份。(您还可以监听按键、鼠标点击和触摸以检查 activeElement 是否更改。)如果您涵盖这些选项,您的 intervalTimer 将几乎不需要清理。