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下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
Jun 12 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
Apr 27 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
layui2.0使用table+laypage实现真分页
Jul 27 Javascript
vue实现标签云效果的示例
Nov 09 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 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
PHP操作XML作为数据库的类
2010/12/19 PHP
解析PHP的session过期设置
2013/06/29 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
树结构之JavaScript
2017/01/24 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
python实现折半查找和归并排序算法
2017/04/14 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Python 修改列表中的元素方法
2018/06/26 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
青年文明号服务承诺
2014/03/31 职场文书
煤矿安全协议书
2014/08/20 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
python基础之爬虫入门
2021/05/10 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js