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


Posted in Javascript onMay 25, 2015

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

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

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

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则无此限制。

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

Javascript 相关文章推荐
jQuery的.live()和.die() 使用介绍
Sep 10 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
js对象继承之原型链继承实例
Jan 10 Javascript
JavaScript实现打开链接页面的方式汇总
Jun 02 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
jQuery复合事件结合toggle()方法的用法示例
Jun 10 jQuery
JS实现留言板功能[楼层效果展示]
Dec 27 Javascript
微信小程序开发常见问题及解决方案
Jul 11 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
如何使用Jquery动态生成二级选项列表
Feb 06 jQuery
原生JS实现微信通讯录
Jun 18 Javascript
jQuery实现表格行上移下移和置顶的方法
May 22 #Javascript
jquery控制表单输入框显示默认值的方法
May 22 #Javascript
jQuery实现自动滚动到页面顶端的方法
May 22 #Javascript
JavaScript检测鼠标移动方向的方法
May 22 #Javascript
jQuery实现强制cookie过期方法汇总
May 22 #Javascript
jQuery判断指定id的对象是否存在的方法
May 22 #Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 #Javascript
You might like
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
php使用codebase生成随机数
2014/03/25 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python实现的一个简单LRU cache
2014/09/26 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
详解Python locals()的陷阱
2019/03/26 Python
python数据挖掘需要学的内容
2019/06/23 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
中科前程Java笔试题
2016/11/20 面试题
毕业自我评价
2014/02/05 职场文书
党日活动总结
2014/05/07 职场文书
分公司经理任命书
2014/06/05 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
地道战观后感400字
2015/06/04 职场文书
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏