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参考实例2.0 用jQuery选择元素
Apr 07 Javascript
js获得页面的高度和宽度的方法
Feb 23 Javascript
js的Boolean对象初始值示例
Mar 04 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
Apr 20 Javascript
vue组件jsx语法的具体使用
May 21 Javascript
vue如何进行动画的封装
Sep 26 Javascript
Vue可自定义tab组件用法实例
Oct 24 Javascript
浅谈layui 表单元素的选中问题
Oct 25 Javascript
JavaScript隐式类型转换代码实例
May 29 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
关于时间计算的结总
2006/12/06 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
urllib2自定义opener详解
2014/02/07 Python
Python 异常处理的实例详解
2017/09/11 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
基于python检查矩阵计算结果
2020/05/21 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
园林毕业生自我鉴定范文
2013/12/29 职场文书
无故旷工检讨书
2014/01/26 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android