关于如何确定焦点“并发”到 textarea 的位置,这里有几个很好的问题onblur
。
但是我还没有找到一种好的跨浏览器方法来确定单击了哪个锚标记导致 textarea 触发onblur
,setTimeout
或者没有。 document.activeElement
看起来很有希望,但是,答案似乎相反,没有setTimeout
,activeElement
是不可靠的。在某些浏览器中,我不断收到body
返回。activeElement
例如: jsFiddle-ige #1:
HTML
<form>
<input onblur="blurHandler();" type="text" id="spam1"
value="immediate blur check">
<input onblur="blurHandlerTimeout();" type="text" id="spam2"
value="delayed blur check">
<a href="#" id="spam3">X</a>
<br>
</form>
<br>
<hr>
<br>
<div id="logs"></div>
JavaScript
var logs = document.getElementById('logs');
function blurHandler() {
logit(document.activeElement.outerHTML.substr(0, 80));
}
function blurHandlerTimeout() {
setTimeout(function () {
logit(document.activeElement.outerHTML.substr(0, 80));
}, 10);
}
function logit(msg) {
try {
var e = document.createTextNode(msg), // probably a better way, but this does allow html as text
f = document.createElement('div');
logs.insertBefore(e, logs.firstChild);
logs.insertBefore(f, logs.firstChild);
} catch (err) {
alert(err);
}
}
立即模糊检查文本框中的用于模糊的正文元素每次都会出现以下情况:
- Safari 5.1.7(它根本不让我专注于锚点,标签或点击)
- 火狐 18.0.1
- 铬 24.0.1312.56 m,
将焦点设置到延迟模糊复选框并单击/切换到锚点会给我:
- Chrome:如果单击锚点,则为正文
- Chrome:如果我进入它的锚点
- Safari:身体任何一种方式
- Firefox:无论如何都是锚
IE8 每次都会为每个文本框、延迟处理程序或否给我一个锚点。
所以诚然,有一些方法可以让锚在共享范围级别(例如,全局)设置一个布尔值,并从模糊事件查询中获得一个 setTimeout 布尔值来查看锚 [最近] 是否获得焦点,但是天哪,那是笨拙的。
就是说,我做到了,付出或接受,在这里:jsFiddle-ige #2 似乎在所有四个中都可以正常工作,尽管我担心这将是极端情况下的疯狂。
有没有更好的方法来做到这一点?jQuery 很好,我想,虽然我更喜欢干净的 JavaScript 解决方案——也就是说,干净的 jQuery 解决方案比复杂的 JavaScript 修复更好。