ホームページ > ウェブフロントエンド > jsチュートリアル > JS_javascriptスキルのTHISとWINDOW.EVENT.SRCELEMENTの詳細な説明

JS_javascriptスキルのTHISとWINDOW.EVENT.SRCELEMENTの詳細な説明

WBOY
リリース: 2016-05-16 15:57:49
オリジナル
1356 人が閲覧しました

まず簡単な例を見てみましょう:

コードをコピーします コードは次のとおりです:

まったく問題ありません。

では、どのような場合に使用できなくなるのでしょうか?

fuction method()
{
  alert(this.value);
}
<input type="text" onblur="method()"/>
ログイン後にコピー

method() は応答関数によって呼び出される関数であるため、これは不可能です。

では、この状況では何をすべきでしょうか?

方法 1:

fuction method(btn)
{
  alert(btn.value);
}
<input type="text" onblur="method(this)"/>
ログイン後にコピー

問題ありません!

方法 2:

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 つの違いとつながりを見てみましょう

これ:

例を見てみましょう:

 <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>
ログイン後にコピー

この時点で表示される答えは「未定義」です。これは、関数呼び出し時に 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 属性を直接使用して取得することはできませんが、これはパラメータとして渡す必要があります。

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>
ログイン後にコピー

この時点で得られた答えは「click」で、関数呼び出し時に window.event.srcElement プロパティを使用して取得できることを示しています。

window.event.srcElement は直接使用できるのに、これは直接使用できないのはなぜですか?純粋に文字通りの意味では、これは「現在」を意味します。関数を呼び出すときに、特定のコントロールを関数内で直接使用することはできません。 2 番目のコードでは、これをパラメーターとして渡すため、正しい答えが得られます。

実際this と window.event.srcElement の使用の違いは次のとおりです。この属性を直接使用したい場合、この時点では関数を呼び出すことはできませんが、応答関数でなければなりません。一方、window.event.srcElement にはそのような制限はありません。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート