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图片阅览组件
Nov 09 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
May 07 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
jquery获取img的src值的简单实例
May 17 Javascript
纯JS代码实现隔行变色鼠标移入高亮
Nov 23 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
Feb 10 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
vue注册组件的几种方式总结
Mar 08 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
Jan 05 jQuery
小程序getLocation需要在app.json中声明permission字段
Apr 04 Javascript
微信小程序解析富文本过程详解
Jul 13 Javascript
通过实例解析json与jsonp原理及使用方法
Sep 27 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/10/09 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
jQuery实现的简单分页示例
2016/06/01 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python对象转JSON字符串的方法
2016/04/27 Python
关于Python数据结构中字典的心得
2017/12/04 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
python 获取字符串MD5值方法
2018/05/29 Python
python实现dijkstra最短路由算法
2019/01/17 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
10张动图学会python循环与递归问题
2021/02/06 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
专升本自我鉴定
2013/10/10 职场文书
作弊检讨书1000字
2014/02/01 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
党员民主评议自我评价
2014/10/20 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL