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 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
javascript dom 操作详解 js加强
Jul 13 Javascript
JS实现一个列表中包含上移下移删除等功能
Sep 24 Javascript
提交按钮的name='submit'引起的js失效问题及原因
Feb 25 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
Mar 04 Javascript
javaScript实现滚动新闻的方法
Jul 30 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
vue.js 2.0实现简单分页效果
Jul 29 Javascript
详解Vue 单文件组件的三种写法
Feb 19 Javascript
angular组件间传值测试的方法详解
May 07 Javascript
vue移动端写的拖拽功能示例代码
Sep 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
PHP多线程抓取网页实现代码
2010/07/22 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
Python中的with...as用法介绍
2015/05/28 Python
python直接访问私有属性的简单方法
2016/07/25 Python
儿童python练习实例
2018/05/27 Python
python使用tornado实现登录和登出
2018/07/28 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
利用python实现逐步回归
2020/02/24 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
python判断正负数方式
2020/06/03 Python
Python map及filter函数使用方法解析
2020/08/06 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
媒体宣传策划方案
2014/05/25 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
2014年科室工作总结
2014/11/20 职场文书
重阳节活动主持词
2015/07/04 职场文书
董事长秘书工作总结
2015/08/14 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Java基础-封装和继承
2021/07/02 Java/Android