JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
我们先看一个简单的例子:
<inputtype="text"onblur="alert(this.value)"/>完全没有问题。
那么什么情况下不可以用?
fuctionmethod() { alert(this.value); } <inputtype="text"onblur="method()"/>
这个就不可以,因为method()是被响应函数调用的函数。
那么这种情况下怎么办?
方法一:
fuctionmethod(btn) { alert(btn.value); } <inputtype="text"onblur="method(this)"/>
没问题!
方法二:
fuctionmethod() { alert(window.event.srcElement.value); } <inputtype="text"onblur="method()"/>
没问题!window.event.srcElement取得触发事件的控件
我们在看一个稍微绕一点的例子
<head> <scripttype="text/javascript"> functionInitEvent(){ varinputs=document.getElementsByTagName_r("input"); for(vari=0;i<inputs.length;i++){ inputs[i].onblur=OnblurEvent; } } functionOnblurEvent(){ //OnblurEvent是onblur的响应函数,而不是被响应函数调用的函数 //所以可以用this来获取发生事件的对象 if(this.value.length>0){ this.style.backgroundColor="white"; } else{ this.style.backgroundColor="red"; } } </script> </head> <bodyonload="InitEvent()"> <inputid="Text1"type="text"/> <inputid="Text2"type="text"/> <inputid="Text3"type="text"/> </body> </html>
我们再来看看2者之间的区别和联系
this:
下面先看一个例子:
<html> <title>this与srcElement的区别</title> <head> <scripttype="text/javascipt>" functionbtnClick(){ alert(this.value); } </script> </head> <body> <inputtype="button"value="单击"onclick="btnClick()"/> </body> </html>
此时弹出的答案为“undefined”,说明在调用函数时不能使用this.属性来获取。再看下一个例子:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title>无标题页</title> <scripttype="text/javascript"> functionbtnClick(btn){ alert(btn.value); } </script> </head> <body> <inputtype="button"onclick="btnClick(this)"value="单击"/> </body> </html>
此时得出的答案为“单击”,此时为什么可以呢?从代码中可以看出,在onclick事件调用函数btnClick()时,将this当作参数传递给了函数。
综合以上:在函数调用时不能直接使用this.属性来获取,而必须将this当作参数传递。
window.event.srcElement:
下面看一个例子:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title>无标题页</title> <scripttype="text/javascript"> functionbtnClick(){ alert(window.event.srcElement.value); } </script> </head> <body> <inputtype="button"onclick="btnClick()"value="单击"/> </body> </html>
此时得出的答案为“单击”,说明在调用函数时可以使用window.event.srcElement.属性来获取。
为什么this不能直接使用而window.event.srcElement可以直接使用呢?从单纯的字面上说this的意思是“当前”。在函数调用时,没有指定具体是哪一个控件,在函数中直接用this是不可以的。在第二段代码中就将this当成了参数传递,所以能得出正确的答案。
其实this和window.event.srcElement的使用区别是:如果要直接使用this.属性,此时的函数不能是被调用的而必须是响应函数,而window.event.srcElement则无此限制。
以上所述就是本文的全部内容了,希望大家能够喜欢。