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 相关文章推荐
jQuery 源码分析笔记(6) jQuery.data
Jun 08 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
在Google 地图上实现做的标记相连接
Jan 05 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
Apr 08 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
jQuery下拉框的简单应用
Jun 24 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
jquery的 filter()方法使用教程
Mar 22 jQuery
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
Jan 19 Javascript
js实现倒计时秒杀效果
Mar 25 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
Destoon实现多表查询示例
2014/08/21 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
js tab效果的实现代码
2009/12/26 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
python八皇后问题的解决方法
2018/09/27 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
Python中os模块功能与用法详解
2020/02/26 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
毕业生造价工程师求职信
2013/10/17 职场文书
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
图书馆义工感想
2015/08/07 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
MySQL空间数据存储及函数
2021/09/25 MySQL
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技