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 xml为数据源的下拉框控件
Jul 07 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
May 04 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
Dec 16 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
JavaScript评论点赞功能的实现方法
Mar 13 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
微信小程序实现长按删除图片的示例
May 18 Javascript
js实现通过开始结束控制的计时器
Feb 25 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
layui原生表单验证的实例
Sep 09 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
对vue生命周期的深入理解
Dec 03 Vue.js
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/10/09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
python解析中国天气网的天气数据
2014/03/21 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
wxPython学习之主框架实例
2014/09/28 Python
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python如何在终端里面显示一张图片
2016/08/17 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
python在地图上画比例的实例详解
2020/11/13 Python
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS