首頁 > web前端 > js教程 > JS中的THIS和WINDOW.EVENT.SRCELEMENT詳解_javascript技巧

JS中的THIS和WINDOW.EVENT.SRCELEMENT詳解_javascript技巧

WBOY
發布: 2016-05-16 15:57:49
原創
1355 人瀏覽過

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

複製程式碼 程式碼如下:

完全沒有問題。

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

fuction method()
{
  alert(this.value);
}
<input type="text" onblur="method()"/>
登入後複製

這個就不可以,因為method()是被回應函數呼叫的函數。

那麼這種情況下怎麼辦?

方法一:

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取得觸發事件的控制項

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

<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:

  下面先看一個例子:

 <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.屬性來取得。再看下一個例子:

 <!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:

下面看一個例子:

 <!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則無此限制。

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板