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 中的内存泄露模式
Aug 13 Javascript
Lua表达式和控制结构学习笔记
Dec 15 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 jQuery
js 获取json数组里面数组的长度实例
Oct 31 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
详解Vue3 Composition API中的提取和重用逻辑
Apr 29 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
react antd表格中渲染一张或多张图片的实例
Oct 28 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 has encountered an Access Violation
2007/01/15 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
使用python实现省市三级菜单效果
2016/01/20 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
python常用函数详解
2016/09/13 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python猴子补丁知识点总结
2020/01/05 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Python request中文乱码问题解决方案
2020/09/17 Python
python利用opencv保存、播放视频
2020/11/02 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
EJB实例的生命周期
2016/10/28 面试题
印刷工程专业应届生求职信
2013/09/29 职场文书
应聘收银员个人的求职信
2013/11/30 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
怎样写离婚协议书
2015/01/26 职场文书
预备党员个人总结
2015/02/14 职场文书
产品质量保证书范本
2015/02/27 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
投资入股协议书
2016/03/22 职场文书
element tree树形组件回显数据问题解决
2022/08/14 Javascript