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 相关文章推荐
JavaScript窗口功能指南之在窗口中书写内容
Jul 21 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
JS实现的论坛Ajax打分效果完整实例
Oct 31 Javascript
详解Node.js 命令行程序开发教程
Jun 07 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
vue watch监听对象及对应值的变化详解
Feb 24 Javascript
详解微信小程序的 request 封装示例
Aug 21 Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 Javascript
angularjs自定义过滤器demo示例
Aug 24 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
vue 需求 data中的数据之间的调用操作
Aug 05 Javascript
从原生JavaScript到React深入理解
Jul 23 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
HTML中事件触发列表与解说
2007/07/09 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
js读取cookie方法总结
2014/10/31 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
jQuery事件对象总结
2016/10/17 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python中super()函数简介及用法分享
2016/07/11 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
python打开音乐文件的实例方法
2020/07/21 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
总经理岗位职责范本
2014/02/02 职场文书
创意婚礼策划方案
2014/05/18 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
客户答谢会致辞
2015/07/30 职场文书
七年级作文之冬景
2019/11/07 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
MySQL索引是啥?不懂就问
2021/07/21 MySQL
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS