根据 W3C HTML4.01 规范中的描述,onFocus 是 HTML 中的标准属性,它在元素通过鼠标或者键盘 TAB 导航获得焦点时触发,一般应用在 A、AREA、LABEL、INPUT、SELECT、TEXTAREA、BUTTON 元素上。此事件不冒泡。
根据 W3C DOM Level 2 (HTML) 规范中的描述,HTMLSelectElement、HTMLInputElement、HTMLTextAreaElement、HTMLAnchorElement 这几个接口(对应 HTML 标签为 SELECT、INPUT、TEXTAREA、A)存在 Focus() 方法,此方法可以使当前元素获得键盘焦点。
关于 Focus 的更多资料,请参见 HTML4.01 规范 18.2.3 Intrinsic events、DOM Level 2 (HTML) 规范 1.6.5. Object definitions、DOM Level 2 (Event) 规范 1.6.5. HTML event types 中的内容。
其中 W3C DOM Level 2 (Event) 和 HTML4.01 这两个规范在 Focus 事件的可触发元素说明存在不一致。
W3C DOM Level 2 (Event) 规范中说明可以触发 Focus 事件的元素为 LABEL, INPUT, SELECT, TEXTAREA, BUTTON 之外,而在 HTML 4.01 规范中还存在 A 和 AREA 元素。
另外,在用户单击某元素时,会触发一系列相关事件发生,他们的执行顺序为 MouseDown、MouseUp、Click,相关说明请参照 DOM-Level-2-Events 规范 1.6.2. Mouse event types 中的 click 部分。
在用户通过鼠标操作触发 click 事件时,基本的事件触发流程为:MouseDown 事件 --> MouseUp 事件 --> Click 事件。
如果用户点击的元素可以获得焦点,并且当前还没有获得焦点时,会在 MouseUp 事件前先触发 Focus 事件,再依次触发其后事件。
此时就会出现问题,如果被点击的元素无法通过点击操作获得焦点,则 Focus 事件不会被触发,他的事件函数也不会因点击操作而运行,这就有可能导致功作者设计的功能无法按预期效果执行。
当页面开发者将关键事件处理程序放置到 Focus 事件中,并期望使用鼠标单击操作触发 Focus 事件内处理函数时,可能会导致无法触发相应事件。
所有浏览器 |
---|
根据相关事件规范说明,一般情况下可以触发 Focus 事件的元素为 A, AREA, LABEL, INPUT, SELECT, TEXTAREA, BUTTON,它们均可使用设备指针(鼠标)和 TAB 键切换到相应的元素标签上,并触发焦点事件。
实际上各个浏览器对使用设备指针触发的 Focus 事件处理情况不一,我们将常用 HTML 标签依次绑定 click 和 Focus 事件监听处理函数,依次点击各个标签元素,在右侧的事件信息框中观察执行情况。
由于相关的测试代码较多,故不在页面上展示,具体代码请参见页面底部测试页面部分。
汇总测试程序数据,可得出各浏览器运行结果表,如下:
click 标记是否可以获得焦点 | IE6 IE7 IE8 | Firefox | Chrome Safari | Opera |
---|---|---|---|---|
A | 可 | 可 | 否 | 可 |
AREA | 可 | 可 | 否 | 可 |
LABEL | 否 | 否 | 否 | 否 |
INPUT[type=text]
INPUT[type=password] |
可 | 可 | 可 | 可 |
SELECT TEXTAREA | 可 | 可 | 可 | 可 |
BUTTON
INPUT[type=radio] INPUT[type=checkbox] INPUT[type=button] INPUT[type=submit] |
可 | 可 | 否 | 可 |
EMBED | 可 | 可 | 否 | 否 |
IFRAME | 可 | 否 | 否 | 否 |
TABLE CAPTION TD | 可 | 否 | 否 | 否 |
FIELDSET | 可 | 否 | 否 | 否 |
其他 HTML 元素 1 | 否 | 否 | 否 | 否 |
注 1:这些 HTML 元素包括: TD DIV SPAN CODE LEGEND TBODY TFOOT THEAD ABBR ACRONYM ADDRESS B BDO BIG BLOCKQUOTE CENTER CITE DD DEL DIR DFN DL DT EM FONT FORM H1 H2 H3 H4 H5 H6 I INS INS KBD LI MENU OL OBJECT P PRE Q S SAMP SMALL STRIKE STRONG SUB SUP TH TR TT U UL VAR。
可以看到各浏览器对于 A AREA BUTTON INPUT SELECT TEXTAREA EMBED IFRAME TABLE CAPTION TD FIELDSET 这几个元素,通过设备指针(鼠标)的点击操作时触发 Focus 事件的情况,在实现中存在差异。
操作系统版本: | Windows 7 Ultimate build 7600 |
---|---|
浏览器版本: |
IE6
IE7 IE8 Firefox 3.6.8 Chrome 7.0.517.0 dev Safari 5.0.1 Opera 10.61 |
测试页面: | click_and_Focus.html |
本文更新时间: | 2010-09-03 |
A AREA BUTTON INPUT SELECT TEXTAREA EMBED IFRAME TABLE CAPTION TD FIELDSET CLICK Focus 鼠标 点击 焦点