DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript綜合知識 >> JS中的THIS和WINDOW.EVENT.SRCELEMENT詳解
JS中的THIS和WINDOW.EVENT.SRCELEMENT詳解
編輯:JavaScript綜合知識     

 對於js初學著必須理解this和srcElement的應用,這也是面試中經常考到的。下面我們就通過幾個示例來詳細了解下

   

我們先看一個簡單的例子:

 

 代碼如下:
<input type="text" onblur="alert(this.value)"/>完全沒有問題。

 

那麼什麼情況下不可以用?

? 1 2 3 4 5 fuction method() { alert(this.value); } <input type="text" onblur="method()"/>

這個就不可以,因為method()是被響應函數調用的函數。

那麼這種情況下怎麼辦?

方法一:

? 1 2 3 4 5 fuction method(btn) { alert(btn.value); } <input type="text" onblur="method(this)"/>

沒問題!

方法二:

? 1 2 3 4 5 fuction method() { alert(window.event.srcElement.value); } <input type="text" onblur="method()"/>

沒問題!window.event.srcElement取得觸發事件的控件

我們在看一個稍微繞一點的例子

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <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的響應函數,而不是被響應函數調用的函數 // 所以可以用this來獲取發生事件的對象 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者之間的區別和聯系

this:

下面先看一個例子:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 <html> <title>this與srcElement的區別</title> <head> <script type="text/javascipt>" function btnClick(){ alert(this.value); } </script> </head> <body> <input type="button" value="單擊" onclick="btnClick()"/> </body> </html>

此時彈出的答案為“undefined”,說明在調用函數時不能使用this.屬性來獲取。再看下一個例子:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!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>無標題頁</title> <script type="text/javascript"> function btnClick(btn){ alert(btn.value); } </script> </head> <body> <input type="button" onclick="btnClick(this)" value="單擊" />   </body> </html>

此時得出的答案為“單擊”,此時為什麼可以呢?從代碼中可以看出,在onclick事件調用函數btnClick()時,將this當作參數傳遞給了函數。

綜合以上:在函數調用時不能直接使用this.屬性來獲取,而必須將this當作參數傳遞。

window.event.srcElement:

下面看一個例子:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!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>無標題頁</title> <script type="text/javascript"> function btnClick(){ alert(window.event.srcElement.value); } </script> </head> <body> <input type="button" onclick="btnClick()" value="單擊" />   </body> </html>

此時得出的答案為“單擊”,說明在調用函數時可以使用window.event.srcElement.屬性來獲取。

為什麼this不能直接使用而window.event.srcElement可以直接使用呢?從單純的字面上說this的意思是“當前”。在函數調用時,沒有指定具體是哪一個控件,在函數中直接用this是不可以的。在第二段代碼中就將this當成了參數傳遞,所以能得出正確的答案。

其實this和window.event.srcElement的使用區別是:如果要直接使用this.屬性,此時的函數不能是被調用的而必須是響應函數,而window.event.srcElement則無此限制。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved