2012-10-16 33 views
2

如果这是重复的,我很抱歉,但我无法找到我的问题的答案。如果你知道它已经被回答的地方,请给我一个链接。在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中绑定到模糊事件的函数新选定的文本?

问候,

吉尔斯

+0

我认为Chrome正在做正确的事情。 [HTML5规范](http://www.w3.org/TR/2011/WD-html5-20110113/editing.html#focus-management)说,将焦点分配给新元素时,首先运行“无焦点步骤“为旧的。它们是单独的操作,并且在新元素变为活动状态之前发生模糊事件。我不认为你打算在模糊处理程序中访问新的目标。 – Barmar

+0

嗨巴尔马,感谢您的有趣的链接。我会不同意你的意见。同样的文档中说:“当一个被聚焦的元素停止成为一个可聚焦的元素,或者停止聚焦而没有另一个元素明确地聚焦于它时,用户代理应该同步地运行body元素的聚焦步骤,如果有一个” 。在我的情况下,另一个文本框是明确的重点,所以浏览器不应该专注于中间的文档。或者至少它应该让我访问新的焦点文本框,作为启动模糊事件的文本框。 – Gilles

+0

我没有看到该段落如何改变聚焦步骤的​​步骤3(使新元素成为聚焦元素)直到_after_步骤2(在旧元素上运行未聚焦步骤)才发生。 “同步”并不意味着“同时”。最好的情况是,当你将焦点移动到一个新的元素时,这会让不清楚活动元素应该是什么,而未聚焦的事件正在运行。 – Barmar

回答

1

一个小误解,在这里:.blur()不会触发blur事件,它结合了模糊事件的函数,这意味着当模糊时设置将被触发的功能。

也许这种误解是你问题的根源。

更新

我重新阅读的问题,现在我看你想要达到的目的。尽管你的文本导致人们认为你正在编程式地触发模糊,但你的问题是,在chrome中,文档在控制权留下时会获得临时焦点。

而不是在第一个输入的模糊上触发回发,您应该触发下一个输入焦点的回发。根据我在代码中看到的情况,这种改变并不重要,但可以解决您的问题。

+0

嗨阿德里安。对不起,没有使用正确的术语。事件被触发并且绑定到事件的函数被调用。我的问题更多的是这样一个事实,即焦点变化似乎是在IE中一步完成的(从失去焦点的元素变为获得焦点的元素),并在Chrome中分两步(从失去焦点的元素开始记录文件,然后从文件到获得焦点的要素)。在绑定到blur事件的函数中,我可以访问第一步获取焦点的元素(即Chrome中的文档),但不能访问最后一个元素。 Gilles – Gilles

+0

我编辑了这个问题,希望它更清楚。 :-) – Gilles

+0

阿德里安。这听起来像一个好主意。我想我失去了我正在做的事情。让我试着按照你的建议去做,我会将其标记为答案。 – Gilles