現在都支援document.activeElement屬性 ,但是在safari與chrome出現了些狀況……到stackoverflow查了一下,但給出的方法並不靠譜,因為click事件總是趕在focus事件前發生。
//http://stackoverflow.com/questions/483741/how-to-determine-which-html-page-element-has-focusfunction _dom_trackActiveElement(evt) { if (evt && evt.target) { document.activeElement = evt.target == document ? null : evt.target; }}function _dom_trackActiveElementLost(evt) { document.activeElement = null;}if (!document.activeElement) { document.addEventListener("focus",_dom_trackActiveElement,true); document.addEventListener("blur",_dom_trackActiveElementLost,true);}
在標準瀏覽器支援一個叫DOMActivate,但同樣太慢了,幫不上忙。
<br /><!doctype html><br /><html dir="ltr" lang="zh-CN"><br /> <head><br /> <meta charset="utf-8"/><br /> <title>activeElement by 司徒正美</title><br /> <script type="text/javascript"></p><p> window.onload = function(){<br /> var safari=/a/.__proto__=='//';<br /> //http://www.quirksmode.org/js/detect.html<br /> var chrome= navigator.userAgent.indexOf("Chrome") !== -1;</p><p> var addEvent = (function () {<br /> if (document.addEventListener) {<br /> return function (el, type, fn) {<br /> el.addEventListener(type, fn, false);<br /> };<br /> } else {<br /> return function (el, type, fn) {<br /> el.attachEvent('on' + type, function () {<br /> return fn.call(el, window.event);<br /> });<br /> }<br /> }<br /> })();</p><p> function getActiveElement(e) {<br /> var m = document.activeElement;</p><p> alert(m)<br /> }</p><p> var inputs = document.getElementsByTagName("input");<br /> for(var i=0,n=inputs.length;i<n;i++){<br /> addEvent(inputs[i],"click",getActiveElement)<br /> }</p><p> }</p><p> </script></p><p> </head><br /> <body><br /> <form action="#"><br /> <input type="checkbox" name="team" value="team" checked>Spurs<br><br /> <input type="checkbox" name="team" value="pacers">Pacers<br><br /> <input type="checkbox" name="team" value="kings" >Kings<br><br /> <input type="checkbox" name="team" value="other">Other<br /> <p><br /> <input type="button" id="aa" value="按扭1" ><br /> </p><br /> <p><br /> <input type="button" id="bb" value="按扭2" ><br /> </p><br /> <p><br /> <input type="button" id="cc" value="按扭3" ><br /> </p><br /> </form><br /> </body><br /></html><br />
運行代碼
注意,我的目的是想擷取當前啟用元素,並不是想得到當前的點擊的元素……
<br /><!doctype html><br /><html dir="ltr" lang="zh-CN"><br /> <head><br /> <meta charset="utf-8"/><br /> <title>activeElement by 司徒正美</title><br /> <script type="text/javascript"></p><p> window.onload = function(){</p><p> var safari=/a/.__proto__=='//';<br /> //http://www.quirksmode.org/js/detect.html<br /> var chrome= navigator.userAgent.indexOf("Chrome") !== -1;</p><p> var addEvent = (function () {<br /> if (document.addEventListener) {<br /> return function (el, type, fn) {<br /> el.addEventListener(type, fn, false);<br /> };<br /> } else {<br /> return function (el, type, fn) {<br /> el.attachEvent('on' + type, function () {<br /> return fn.call(el, window.event);<br /> });<br /> }<br /> }<br /> })();</p><p> function getActiveElement(e) {<br /> var m;<br /> if(safari || chrome){<br /> m = e.target == document ? null : e.target;<br /> }else{<br /> m = document.activeElement;<br /> }<br /> alert(m)<br /> }</p><p> var inputs = document.getElementsByTagName("input");<br /> for(var i=0,n=inputs.length;i<n;i++){<br /> addEvent(inputs[i],"click",getActiveElement)<br /> }</p><p> }</p><p> </script></p><p> </head><br /> <body><br /> <form action="#"><br /> <input type="checkbox" name="team" value="team" checked>Spurs<br><br /> <input type="checkbox" name="team" value="pacers">Pacers<br><br /> <input type="checkbox" name="team" value="kings" >Kings<br><br /> <input type="checkbox" name="team" value="other">Other<br /> <p><br /> <input type="button" id="aa" value="按扭1" ><br /> </p><br /> <p><br /> <input type="button" id="bb" value="按扭2" ><br /> </p><br /> <p><br /> <input type="button" id="cc" value="按扭3" ><br /> </p><br /> </form><br /> </body><br /></html><br />
運行代碼
記得我以前好像在背光部落格見過這種機制的解析,但此部落格在河蟹浪潮中覆滅了……