如果这是重复的,我很抱歉,但我无法找到我的问题的答案。如果你知道它已经被回答的地方,请给我一个链接。在Chrome上获得焦点元素模糊
我正在使用jquery将函数绑定到文本框的onblur事件。 目标是仅当焦点离开tblUserDetails
表中的文本框时触发回发。 当文本框失去焦点时:
- 在IE中,新的焦点元素是新选定的文本框。
- 在Chrome中,文档会聚焦在两个文本框之间,因此
$(document.activeElement)
永远不会指向新选择的文本框。
这里是我的代码,这在IE工作,但无法在Chrome:
SaveNetworkDetails: function() {
// Trigger the blur event when one of the textboxes loses focus
$("[id$=tblUserDetails]").find('input[id*="txt"]').blur(function (e) {
// Check if the new focused element is among the textboxes
if ($(document.activeElement).parents("[id$=tblUserDetails]").length == 0) {
// Trigger postback
}
});
}
我如何才能找到在Chrome中绑定到模糊事件的函数新选定的文本?
问候,
吉尔斯
我认为Chrome正在做正确的事情。 [HTML5规范](http://www.w3.org/TR/2011/WD-html5-20110113/editing.html#focus-management)说,将焦点分配给新元素时,首先运行“无焦点步骤“为旧的。它们是单独的操作,并且在新元素变为活动状态之前发生模糊事件。我不认为你打算在模糊处理程序中访问新的目标。 – Barmar
嗨巴尔马,感谢您的有趣的链接。我会不同意你的意见。同样的文档中说:“当一个被聚焦的元素停止成为一个可聚焦的元素,或者停止聚焦而没有另一个元素明确地聚焦于它时,用户代理应该同步地运行body元素的聚焦步骤,如果有一个” 。在我的情况下,另一个文本框是明确的重点,所以浏览器不应该专注于中间的文档。或者至少它应该让我访问新的焦点文本框,作为启动模糊事件的文本框。 – Gilles
我没有看到该段落如何改变聚焦步骤的步骤3(使新元素成为聚焦元素)直到_after_步骤2(在旧元素上运行未聚焦步骤)才发生。 “同步”并不意味着“同时”。最好的情况是,当你将焦点移动到一个新的元素时,这会让不清楚活动元素应该是什么,而未聚焦的事件正在运行。 – Barmar