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 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
js 获取时间间隔实现代码
May 12 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
JavaScript比较两个对象是否相等的方法
Feb 06 Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
JS实现双击编辑可修改状态的方法
Aug 14 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
Dec 17 Javascript
Angular6中使用Swiper的方法示例
Jul 09 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
vue.js实现h5机器人聊天(测试版)
Jul 16 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
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
js 幻灯片的实现
2011/12/06 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
jQuery中库的引用方法
2018/01/06 jQuery
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python中的print()输出
2019/04/12 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
实习班主任自我评价
2015/03/11 职场文书
茶花女读书笔记
2015/06/29 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
如何用python绘制雷达图
2021/04/24 Python
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android