對于js初學(xué)著必須理解this和srcElement的應(yīng)用,這也是面試中經(jīng)常考到的。下面我們就通過幾個(gè)示例來詳細(xì)了解下
我們先看一個(gè)簡單的例子:
完全沒有問題。
那么什么情況下不可以用?
- fuction method()
- {
- alert(this.value);
- }
- <input type="text" onblur="method()"/>
這個(gè)就不可以,因?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ā)事件的控件
我們在看一個(gè)稍微繞一點(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:
下面先看一個(gè)例子:
- <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>
此時(shí)彈出的答案為“undefined”,說明在調(diào)用函數(shù)時(shí)不能使用this.屬性來獲取。再看下一個(gè)例子:
- <!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>
此時(shí)得出的答案為“單擊”,此時(shí)為什么可以呢?從代碼中可以看出,在onclick事件調(diào)用函數(shù)btnClick()時(shí),將this當(dāng)作參數(shù)傳遞給了函數(shù)。
綜合以上:在函數(shù)調(diào)用時(shí)不能直接使用this.屬性來獲取,而必須將this當(dāng)作參數(shù)傳遞。
window.event.srcElement:
下面看一個(gè)例子:
- <!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>
此時(shí)得出的答案為“單擊”,說明在調(diào)用函數(shù)時(shí)可以使用window.event.srcElement.屬性來獲取。
為什么this不能直接使用而window.event.srcElement可以直接使用呢?從單純的字面上說this的意思是“當(dāng)前”。在函數(shù)調(diào)用時(shí),沒有指定具體是哪一個(gè)控件,在函數(shù)中直接用this是不可以的。在第二段代碼中就將this當(dāng)成了參數(shù)傳遞,所以能得出正確的答案。
this和window.event.srcElement的使用區(qū)別
其實(shí)是:如果要直接使用this.屬性,此時(shí)的函數(shù)不能是被調(diào)用的而必須是響應(yīng)函數(shù),而window.event.srcElement則無此限制。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
新聞熱點(diǎn)
疑難解答
圖片精選