以下大部分為學習《JavaScript 高級程序設計》(第 3 版) 所做筆記。
目錄:
1. 了解焦點事件
2. blur 事件
3. focus 事件
Q: 焦點事件什么時候觸發?
A: 當元素獲得或失去焦點時觸發。
Q: 焦點事件的用處?
A: 利用焦點事件並與 document.hasFocus() 方法及 document.activeElement 屬性配合,可以知曉用戶在頁面上的行蹤。
Q: 焦點事件有哪些?
A: blur DOMFocusIn DomFocusOut focus focusin focusout
瀏覽器支持
blur: 所有瀏覽器都支持
DOMFocusIn: 只有 Opera 支持
DomfocusOut: 只有 Opera 支持
focus: 所有瀏覽器都支持
focusin: 支持的瀏覽器:IE5.5+、Safari5.1+、Opera11.5+、Chrome
focusout: 支持的瀏覽器:IE5.5+、Safari5.1+、Opera11.5+、Chrome
IE 的 focusin 和 focusout 與 Opera 的 DOMFocusIn 和 DOMFocusout 發生重疊, IE 的方式最終被 DOM3 級事件采納為標准方式。
不冒泡的事件:blur focus
( 即使 blur 跟 focus 不冒泡,也可以在捕獲階段偵聽它們。)
在失去焦點的元素上觸發, 事件目標是失去焦點的元素的事件: focusout blur DomFocusOut
在獲得焦點的元素上觸發, 事件目標是獲得焦點的元素的事件: focusin focus DomfocusIn
當焦點從頁面的一個元素移動到另一個元素,會依次觸發下列事件:focusout focusin blur DOMFocusOut focus DOMFocusIn
檢測瀏覽器是否支持事件
console.log( "onblur" in window ); //輸出:true console.log( "亂打的" in window ); //輸出:false
true: 瀏覽器支持
false: 瀏覽器不支持
下例實現:在文本框中輸入英文,文本框時失去焦點之后觸發 blur 事件,文本框內容小寫變大寫
方式1:通過 JS 來指定事件處理程序
<!DOCTYPE html> <html> <body> <script type="text/javascript" src="EventUtil.js"></script> <script> //跨瀏覽器對象 EventUtil //為 window 指定 load 事件處理程序 //確保往 DOM 中添加新元素之前頁面已經加載完畢,如果在頁面加載完畢之前操作 document.body 會出錯 EventUtil.addHandler(window, "load", function(event){ var event = EventUtil.getEvent(); //創建一個 input 元素 var input1 = document.createElement("input"); //設置 input1 的 type input1.type = "text"; //為 input1 指定 blur 事件,元素失去焦點之后觸發 blur 事件文本框內文本內容小寫變大寫 EventUtil.addHandler(input1, "blur", function(){ this.value = this.value.toUpperCase(); }); //添加節點 input1 document.body.appendChild(input1); }); </script> </body> </html>
(代碼中的 EventUtil 對象:https://www.cnblogs.com/xiaoxuStudy/p/13131725.html#three )
頁面表現:
在文本框內輸入一個單詞
點擊框外,文本框失去焦點后,觸發了 blur 事件,文本框內容小寫變大寫
方式2:為 <input> 元素添加一個 onblur 特性
<!DOCTYPE html> <html> <body> <script> function fn(){ var x = document.getElementById("word"); x.value = x.value.toUpperCase(); } </script> <p>輸入一個單詞:</p> <input type="text" id="word" onblur="fn()"> </body> </html>
頁面表現同上。
下例實現:文本框獲得焦點時觸發 focus 事件,修改文本框背景顏色為黃色
方式1:通過 JS 來指定事件處理程序
<!DOCTYPE html> <html> <body> <script type="text/javascript" src="EventUtil.js"></script> <script> //跨瀏覽器對象 EventUtil //為 window 指定 load 事件處理程序 //確保往 DOM 中添加新元素之前頁面已經加載完畢,如果在頁面加載完畢之前操作 document.body 會出錯 EventUtil.addHandler(window, "load", function(event){ var event = EventUtil.getEvent(); //創建一個 input 元素 var input1 = document.createElement("input"); //設置 input1 的 type input1.type = "text"; //為 input1 指定 focus 事件,元素獲得焦點之后觸發 focus 事件文本框背景顏色變為黃色 EventUtil.addHandler(input1, "focus", function(){ this.style.background = "yellow"; }); //添加節點 input1 document.body.appendChild(input1); }); </script> </body> </html>
頁面表現:
點擊文本框內,input 元素獲得焦點后文本框背景顏色變為黃色。
方式2:為 <input> 元素添加一個 onfocus 特性
<!DOCTYPE html> <html> <body> <script> function fn(x){ x.style.background = "yellow"; } </script> <input type="text" onfocus="fn(this)"> </body> </html>
頁面表現同上。