JS中的THIS和WINDOW.EVENT.SRCELEMENT詳解
我們先看一個簡單的例子:
<input type="text" onblur="alert(this.value)"/>完全沒有問題。
那么什么情況下不可以用?
fuction method() { alert(this.value); } <input type="text" onblur="method()"/>
這個就不可以,因?yàn)閙ethod()是被響應(yīng)函數(shù)調(diào)用的函數(shù)。
那么這種情況下怎么辦?
方法一:
fuction method(btn) { alert(btn.value); } <input type="text" onblur="method(this)"/>
沒問題!
方法二:
fuction method() { alert(window.event.srcElement.value); } <input type="text" onblur="method()"/>
沒問題!window.event.srcElement取得觸發(fā)事件的控件
我們在看一個稍微繞一點(diǎn)的例子
<head> <script type="text/javascript"> function InitEvent() { var inputs = document.getElementsByTagName_r("input"); for (var i = 0; i < inputs.length; i++) { inputs[i].onblur = OnblurEvent; } } function OnblurEvent() { // OnblurEvent是onblur的響應(yīng)函數(shù),而不是被響應(yīng)函數(shù)調(diào)用的函數(shù) // 所以可以用this來獲取發(fā)生事件的對象 if (this.value.length > 0) { this.style.backgroundColor = "white"; } else { this.style.backgroundColor = "red"; } } </script> </head> <body onload="InitEvent()"> <input id="Text1" type="text" /> <input id="Text2" type="text" /> <input id="Text3" type="text" /> </body> </html>
我們再來看看2者之間的區(qū)別和聯(lián)系
this:
下面先看一個例子:
<html> <title>this與srcElement的區(qū)別</title> <head> <script type="text/javascipt>" function btnClick(){ alert(this.value); } </script> </head> <body> <input type="button" value="單擊" onclick="btnClick()"/> </body> </html>
此時彈出的答案為“undefined”,說明在調(diào)用函數(shù)時不能使用this.屬性來獲取。再看下一個例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>無標(biāo)題頁</title> <script type="text/javascript"> function btnClick(btn){ alert(btn.value); } </script> </head> <body> <input type="button" onclick="btnClick(this)" value="單擊" /> </body> </html>
此時得出的答案為“單擊”,此時為什么可以呢?從代碼中可以看出,在onclick事件調(diào)用函數(shù)btnClick()時,將this當(dāng)作參數(shù)傳遞給了函數(shù)。
綜合以上:在函數(shù)調(diào)用時不能直接使用this.屬性來獲取,而必須將this當(dāng)作參數(shù)傳遞。
window.event.srcElement:
下面看一個例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>無標(biāo)題頁</title> <script type="text/javascript"> function btnClick(){ alert(window.event.srcElement.value); } </script> </head> <body> <input type="button" onclick="btnClick()" value="單擊" /> </body> </html>
此時得出的答案為“單擊”,說明在調(diào)用函數(shù)時可以使用window.event.srcElement.屬性來獲取。
為什么this不能直接使用而window.event.srcElement可以直接使用呢?從單純的字面上說this的意思是“當(dāng)前”。在函數(shù)調(diào)用時,沒有指定具體是哪一個控件,在函數(shù)中直接用this是不可以的。在第二段代碼中就將this當(dāng)成了參數(shù)傳遞,所以能得出正確的答案。
其實(shí)this和window.event.srcElement的使用區(qū)別是:如果要直接使用this.屬性,此時的函數(shù)不能是被調(diào)用的而必須是響應(yīng)函數(shù),而window.event.srcElement則無此限制。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
很不錯的兩款Bootstrap Icon圖標(biāo)選擇組件
這篇文章主要介紹了不容錯過的兩款Bootstrap Icon圖標(biāo)選擇組件,支持自定義的圖標(biāo),拿出來分享下,絕對的干貨,感興趣的小伙伴們可以參考一下2016-01-01js中通過split函數(shù)分割字符串成數(shù)組小例子
分割字符串成數(shù)組的方法有很多,不過使用最多的還是split函數(shù),接下來為大家介紹下它的具體使用方法,感興趣的朋友可以參考下2013-09-09JS實(shí)現(xiàn)圖片預(yù)加載之無序預(yù)加載功能代碼
這篇文章主要介紹了JS實(shí)現(xiàn)圖片預(yù)加載之無序預(yù)加載功能代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05js中的值類型和引用類型小結(jié) 文字說明與實(shí)例
下面就舉例講一下這兩種類型在JavaScript中的體現(xiàn)、用法及注意事項(xiàng)。2010-12-12微信小程序 wx:for遍歷循環(huán)使用實(shí)例解析
這篇文章主要介紹了微信小程序 wx:for遍歷循環(huán)使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09