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判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 Javascript
JS实现完全语义化的网页选项卡效果代码
Sep 15 Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
简化版的vue-router实现思路详解
Oct 19 Javascript
vue+webpack中配置ESLint
Nov 07 Javascript
js中事件对象和事件委托的介绍
Jan 21 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 06 Javascript
小程序实现背景音乐播放和暂停
Jun 19 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 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
第二节--PHP5 的对象模型
2006/11/16 PHP
MySQL相关说明
2007/01/15 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
python定时器使用示例分享
2014/02/16 Python
Python入门篇之数字
2014/10/20 Python
python实现连接mongodb的方法
2015/05/08 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
高级技校毕业生自荐信
2013/11/18 职场文书
一年级班主任感言
2014/03/08 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
班级心理活动总结
2014/07/04 职场文书
论文致谢词范文
2015/05/14 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
关于Redis的主从复制及哨兵问题
2022/06/16 Redis