这个其实也是一个很基础的问题,不过又碰巧遇到了,所以记录一下。

假设我们有这么一个需求,按下按钮,弹出提示框,显示按钮的value值。

可能有一些人提起笔就写:

<button onclick="a()" value="a">click</button>

<script>
function a(){
alert(this.value);
}
</script>

看上去好像符合逻辑,其实实际执行一看,弹出框里显示的是undefined。将此时的this打印一下,发现此时的this指的是window。

其实,这里我们为按钮绑定的onclick事件,表示的是对这个函数的引用,当我们点击这个按钮时,会在window下执行所绑定的函数。而不是想当然地认为此时是按钮这个dom在调用函数。

那么我们应该怎么达到我们的目的呢,方法有多种。

第一种是在函数调用的时候传入参数。

<button onclick="a(this.value)" value="a">click</button>
<script>
function a(x){
alert(x);
}
</script>

也许你会觉得这种方法不符合你编程的思路,那么你可以试试另一种方法。

<button id="b" value="b">click</button>
<script>
function b(){
alert(this.value)
}
document.getElementById("b").onclick = b;
</script>

这种方法同样可以解决问题。

可能看到这里你会疑惑,为什么这时候this.value又起作用了。

其实这里做的事与前面不同,这里是将b函数的内容赋值到了这个按钮的dom的onclick上,而不是调用window下的这个函数。当点击按钮时,调用的其实是按钮自身的函数,这是的this自然也就是指着这个按钮本身了。

onclick与this的更多相关文章

  1. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  2. android 事件分发机制详解(OnTouchListener,OnClick)

    昨天做东西做到触摸事件冲突,以前也经常碰到事件冲突,想到要研究一下Android的事件冲突机制,于是从昨天开始到今天整整一天时间都要了解这方面的知识,这才懂了安卓的触摸和点击事件的机制.探究如下: 首 ...

  3. JavaScript 解决 onblur 与 onclick 冲突

    <input type="text" onblur="function1" /> <input type="button" ...

  4. 探寻<a>中的href和onclick

    一.知识点: onclick的方法参数必须加引号 href跳转参数有长度限制 href中执行js会把encodeURIComponent()编码之后的东西自动解码,有时会影响参数传递 a标签中的onc ...

  5. href="javascript:xxx(this);"和onclick="javascript:xxx(this);"的区别

    href="javascript:xxx(this);"和onclick="javascript:xxx(this);" 一直以为这两种写法是等同的,今天在项目 ...

  6. OnClick和OnClientClick的区别

    OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在IE端运行,一点击就运行. OnClick是服务器端事件处理方法,在服务器端也就是IIS中运行,点击 ...

  7. 在Javascript中onclick()方法应用

    <html> < head> < script type="text/javascript"> function onclick1(){ ale ...

  8. a 标签中加 onclick事件,根据事件中的校验情况来决定是否执行a标签的链接

    a 标签中加 onclick方法后,先执行onclick方法,在去执行a标签href下属性对应的动作,如果不想执行href属性下动作需要用false作为返回值. <a href="ht ...

  9. 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

    前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLa ...

  10. 利用闭包解决for循环里onclick事件不能捕捉实时i值问题

    问题描述 我们都知道,如果我们对于一组元素(相同的标签)同时进行onclick事件处理的时候(在需要获取到索引的时候),一般是写一个for循环,但是onclick是一个异步调用的,所以会带来一个问题, ...

随机推荐

  1. python3 第九章 - 数据类型之Number(数字)

    Python 支持三种不同的数字类型: 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点.Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 ...

  2. IO (三)

    1 转换流 1.1 InputStreamReader 1.1.1 InputStreamReader简介 InputStreamReader是字节流通向字符流的桥梁.它使用指定的charset读取字 ...

  3. zabbix监控的基础概念、工作原理及架构

    一.什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题.是一个基于WE ...

  4. mysql数据库在windows下安装与配置

      mysql是一种开源源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. MySQL是开放源代码的,因此任何人都可以在General Pu ...

  5. Model和ModelAndView

    在请求处理方法可出现和返回的参数类型中,最重要的就是Model和ModelAndView.对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而试图View则用于渲染模 ...

  6. C# Ioc ASP.NET MVC Dependency Injection

    ASP.NET MVC Dependency Injection 同志们,非常快速的Ioc注册接口和注入Mvc Controller,步骤如下: 安装Unity.Mvc NuGet Package 在 ...

  7. grep工具及正则表达式

    正则表达式和通配符 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法,那么该工具就可以处理正则表达式的字符串.vim.grep.awk.sed都支持正 ...

  8. 数据分区------《Designing Data-Intensive Applications》读书笔记9

    进入到第六章了,我们要开始聊聊分布式系统之中的核心问题:数据分区.分布式系统通常是通过大规模的数据节点来处理单机没有办法处理的海量数据集,因此,可以将一个大型数据集可以分布在多个磁盘上,查询负载可以分 ...

  9. Java 常用List集合使用场景分析

    Java 常用List集合使用场景分析 过年前的最后一篇,本章通过介绍ArrayList,LinkedList,Vector,CopyOnWriteArrayList 底层实现原理和四个集合的区别.让 ...

  10. make和makefile简明基础

    0.make.makefile是什么? makefile定义了一系列的规则,来规定哪些部分先编译,哪些部分后编译,写好makefile以后,只需一个make命令就可以让整个工程完全自动编译,所以简单的 ...