首页 > 语言 > JavaScript > 正文

JS中的THIS和WINDOW.EVENT.SRCELEMENT详解

2024-05-06 16:20:45
字体:
来源:转载
供稿:网友

对于js初学着必须理解this和srcElement的应用,这也是面试中经常考到的。下面我们就通过几个示例来详细了解下

我们先看一个简单的例子:

代码如下:

<input type="text" onblur="alert(this.value)"/>完全没有问题。

完全没有问题。

那么什么情况下不可以用?

 

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

这个就不可以,因为method()是被响应函数调用的函数。

那么这种情况下怎么办?

方法一:

 

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

没问题!

方法二:

 

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

没问题!window.event.srcElement取得触发事件的控件

我们在看一个稍微绕一点的例子

 

 
  1. <head> 
  2. <script type="text/javascript"
  3. function InitEvent() { 
  4. var inputs = document.getElementsByTagName_r("input"); 
  5. for (var i = 0; i < inputs.length; i++) { 
  6. inputs[i].onblur = OnblurEvent; 
  7. function OnblurEvent() { 
  8. // OnblurEvent是onblur的响应函数,而不是被响应函数调用的函数 
  9. // 所以可以用this来获取发生事件的对象 
  10. if (this.value.length > 0) { 
  11. this.style.backgroundColor = "white"
  12. else { 
  13. this.style.backgroundColor = "red"
  14. </script> 
  15. </head> 
  16. <body onload="InitEvent()"
  17. <input id="Text1" type="text" /> 
  18. <input id="Text2" type="text" /> 
  19. <input id="Text3" type="text" /> 
  20. </body> 
  21. </html> 

我们再来看看2者之间的区别和联系

this:

下面先看一个例子:

 

 
  1. <html> 
  2. <title>this与srcElement的区别</title> 
  3. <head> 
  4. <script type="text/javascipt>" 
  5. function btnClick(){ 
  6. alert(this.value); 
  7. </script> 
  8. </head> 
  9. <body> 
  10. <input type="button" value="单击" onclick="btnClick()"/> 
  11. </body> 
  12. </html> 

此时弹出的答案为“undefined”,说明在调用函数时不能使用this.属性来获取。再看下一个例子:

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml" > 
  3. <head> 
  4. <title>无标题页</title> 
  5. <script type="text/javascript"
  6. function btnClick(btn){ 
  7. alert(btn.value); 
  8. </script> 
  9. </head> 
  10. <body> 
  11. <input type="button" onclick="btnClick(this)" value="单击" /> 
  12.  
  13. </body> 
  14. </html> 

此时得出的答案为“单击”,此时为什么可以呢?从代码中可以看出,在onclick事件调用函数btnClick()时,将this当作参数传递给了函数。

综合以上:在函数调用时不能直接使用this.属性来获取,而必须将this当作参数传递。

window.event.srcElement:

下面看一个例子:

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml" > 
  3. <head> 
  4. <title>无标题页</title> 
  5. <script type="text/javascript"
  6. function btnClick(){ 
  7. alert(window.event.srcElement.value); 
  8. </script> 
  9. </head> 
  10. <body> 
  11. <input type="button" onclick="btnClick()" value="单击" /> 
  12.  
  13. </body> 
  14. </html> 

此时得出的答案为“单击”,说明在调用函数时可以使用window.event.srcElement.属性来获取。

为什么this不能直接使用而window.event.srcElement可以直接使用呢?从单纯的字面上说this的意思是“当前”。在函数调用时,没有指定具体是哪一个控件,在函数中直接用this是不可以的。在第二段代码中就将this当成了参数传递,所以能得出正确的答案。

this和window.event.srcElement的使用区别

其实是:如果要直接使用this.属性,此时的函数不能是被调用的而必须是响应函数,而window.event.srcElement则无此限制。

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选