まず簡単な例を見てみましょう:
では、どのような場合に使用できなくなるのでしょうか?
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 にはそのような制限はありません。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。