div元素獲取焦點觸發focus事件
通常情況下表單元素獲取焦點後就可以觸發focus事件,這一點在各個瀏覽器都是沒有任何問題。
但很多元素無法獲取焦點,比如div元素,就算是為它註冊focus事件處理函式,也是無法觸發此事件。
下面通過程式碼例項介紹一下如何讓div觸發focus事件。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #thediv{ padding:10px; width:100px; height:100px; background-color:#CCC; } </style> <script type="text/javascript"> var hasAttr=function(el,name){ var attr=el.getAttributeNode && el.getAttributeNode(name); return attr ? attr.specified : false } var addEvent=function(obj,type,callback){ if(obj.addEventListener){ obj.addEventListener(type,callback,false); } else if(obj.attachEvent){ obj.attachEvent("on" + type,callback); } } var done=function(el,fn){ if(!hasAttr(el,"tabindex")){ el.tabIndex=-1; } addEvent(el,"focus",function(e){ fn.call(el,(e || window.event)); }); } window.onload=function(){ var odiv=document.getElementById("thediv"); done(odiv,function(e){ var oshow=document.getElementById("show"); oshow.innerHTML=e.type; }); } </script> </head> <body> <div id="show"></div> <div id="thediv">螞蟻部落</div> </body> </html>
上面的程式碼實現了我們的要求,會觸發focus事件,下面就介紹一下它的實現過程。
一.實現原理:
在預設狀態下,通常只有表單元素才會支援focus和blur事件,對於其他的元素沒有效果,但是隻要將此元素設定一個tabindex屬性就可以使用上述兩個事件了,上面的效果就是根據此道理來實現的。
二.程式碼註釋:
(1).var hasAttr=function(el,name){},此函式可以判斷指定的元素是否具有指定名稱的屬性節點,el引數是元素物件,name引數是屬性節點的名稱。
(2).var attr=el.getAttributeNode && el.getAttributeNode(name),如果瀏覽器支援getAttributeNode,那麼就會返回指定名稱的屬性節點物件。
(3).return attr ? attr.specified : false,如果獲取指定屬性節點,那麼就返回true,否則返回false。
(4).var addEvent=function(obj,type,callback){},此函式可以為指定的元素註冊指定型別的事件處理函式。
(5).if(obj.addEventListener){obj.addEventListener(type,callback,false);},註冊事件處理函式,標準瀏覽器的措施。
(6).else if(obj.attachEvent){obj.attachEvent("on" + type,callback);},為了相容IE8和IE8以下瀏覽器。
(7).var done=function(el,fn){},為指定元素註冊事件處理函式,第一個引數是元素物件,第二個引數是事件處理函式。
(8).if(!hasAttr(el,"tabindex")){el.tabIndex=-1;},如果原來元素上沒有tabindex屬性,就將tabIndex屬性值設定為-1,之所以這樣是為了防止影響之前tabIndex屬性的設定,關於為什麼tabIndex要設定為-1可以參閱相關閱讀。
(9).addEvent(el,"focus",function(e){fn.call(el,(e || window.event));}),註冊事件處理函式,這裡註冊事件處理函式並沒有直接註冊fn,是因為為了實現事件處理函式中的this都能夠指向當前物件,attachEvent()方式註冊事件處理函式在IE6-IE8中,this是指向widow的,所以這裡做了一下相容,事件物件也做了相容。
(10).window.onload=function(){},文件內容完全載入完畢再去執行相應的程式碼。
(11).var odiv=document.getElementById("thediv"),獲取指定id屬性值的元素物件。
相關文章
- javascript如何獲取哪個元素獲得焦點JavaScript
- 如何利用js獲取取得焦點的元素JS
- jQuery|focus焦點家族jQuery
- css 文字框focus獲取焦點設定樣式程式碼例項CSS
- 火狐瀏覽器下focus()無法第二次獲取焦點瀏覽器
- javascript如何獲取觸發事件的物件JavaScript事件物件
- Vue事件獲取觸發事件物件和繫結事件物件Vue事件物件
- jQuery文字框獲取焦點和失去焦點jQuery
- 原生javascript如何獲取觸發事件的物件JavaScript事件物件
- 獲取div元素下li元素的數目
- JavaScript 判斷元素是否獲得焦點JavaScript
- 觸控事件獲取座標事件
- jquery註冊文字框獲取焦點清空,失去焦點賦值jQuery賦值
- combox 的blur焦點離開事件,無法觸發記錄事件
- jquery獲取元素節點jQuery
- jQuery實現文字框獲取焦點jQuery
- JavaScript獲取父元素下子元素節點JavaScript
- input文字框獲取焦點伸縮效果
- js讓文字框獲取焦點程式碼JS
- 文字框獲取焦點設定樣式
- 如何防止滑鼠移出子元素觸發父元素的onmouseout事件事件
- JavaScript文字框獲取焦點彈出tipsJavaScript
- vue中文字框自動獲取焦點Vue
- DIV的失去焦點(blur)實現
- Qt中的焦點事件QT事件
- view.performClick()觸發點選事件ViewORM事件
- JavaScript focus 事件JavaScript事件
- jQuery focus事件jQuery事件
- react focus 事件React事件
- DOM 元素中的焦點管理
- 如何使用angularjs實現文字框獲取焦點AngularJS
- JavaScript 獲取所有後代元素節點JavaScript
- 鴻蒙HarmonyOS實戰-ArkUI事件(焦點事件)鴻蒙UI事件
- 防止滑鼠移出移入子元素觸發mouseout和mouseover事件事件
- 獲取當前元素在兄弟元素節點中的索引索引
- 封裝js獲取當前元素的弟弟元素節點封裝JS
- jQuery點選元素獲取此元素的id屬性值jQuery
- 觸發器中獲取SQL語句觸發器SQL