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 类
Nov 07 Javascript
javascript的trim,ltrim,rtrim自定义函数
Sep 21 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 Javascript
使用node打造自己的命令行工具方法教程
Mar 26 Javascript
node.js实现微信开发之获取用户授权
Mar 18 Javascript
浅析vue-router中params和query的区别
Dec 24 Javascript
js布局实现单选按钮控件
Jan 17 Javascript
ES6中new Function()语法及应用实例分析
Feb 19 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
Apr 30 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
mysql5详细安装教程
2007/01/15 PHP
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
thinkphp缓存技术详解
2014/12/09 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
python操作gmail实例
2015/01/14 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python配置grpc环境
2019/01/01 Python
python函数与方法的区别总结
2019/06/23 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
C面试题
2015/10/08 面试题
教师竞聘演讲稿
2014/05/16 职场文书
高考励志标语
2014/06/05 职场文书
现货白银电话营销话术
2015/05/29 职场文书