HTML事件处理程序绑定方法:

<input type="button" value="click me" onclick="show(this,type,event)">    ---代码1   // 点击按钮谷歌下输出:[input, "button", MouseEvent]

  事件在DOM之前定义:

function show() {              ---代码2
console.log(Array.prototype.slice.call(arguments));
}

  

  之前一直朦朦胧胧,不知道onclick中绑定的show事件是怎么传参数的~~~

  show事件一般我们知道的是可以传两个参数:this和event,分别是绑定的这个DOM对象、发生的事件

  但是这种绑定事件的原理实际上是这样的:

function(){             ---代码3
with(document){
with(this){
// 元素属性值
}
}
}

  在代码1中,我传了type参数,实际上访问的正好是this.type,就是当前DOM元素的type属性。DOM0级绑定事件的原理就是代码3描述的,综合起来可能就类似这样:

  传递的参数a,先在this中找,即this.a,如果未定义,就在document中找,找不到就报错

function show() {               ---代码4
with(document){
with(this){
// 元素属性值
// 实际操作代码
}
}
}

  代码1中传的第1个参数this,这个不用说,都知道是当前的DOM对象;第2个参数type,就是会在this中找,看this有没有这个属性,没有的话,就在document中找;第3个参数就是事件对象。函数里传参的顺序和内容可以随便改变的。

  ------------------------------第2种情况-----------------------------------

  就是表单情况:

<form action="">       ---代码5
<input type="text" name="username">
<input type="button" value="click me" this="32" event="sd" onclick="show(this,getAttribute('this'),type,event,getAttribute('event'),username.value)"> // 点击按钮谷歌下输出:[input, "32", "button", MouseEvent, "sd",""]
</form>

  表单情况会增加一层逻辑,就是this.form:

function(){
with(document){
with(this.form){
with(this){
// 元素属性值
// 处理代码
}
}
}
}

  在代码5中,先说说username.value这个参数,就是表单中可访问的一个作用域this.form。传入参数会先看this有没有定义该属性,有就传入,没有的话,就在this.form中找,没有的话,最后在document中找。

  另外,我故意在DOM上写了this、event的属性,看怎么样才能访问,会不会影响默认的this、event。验证后发现,自定义的属性只能通过getAttribute函数获取到(做这个验证只能说明我的js不扎实o(╥﹏╥)o)

HTML事件处理程序---内联onclick事件的更多相关文章

  1. WPF事件(一)内置路由事件

    原文:WPF事件(一)内置路由事件 Windows是消息驱动的操作系统,运行其上的程序也遵照这个机制运行,随着面向对象开发平台日趋成熟,微软把消息机制封装成了更容易让人理解的事件模型,一个事件包含3个 ...

  2. input 的blur事件之后button的onclick事件不执行解决方案

    最近发现网页程序中有个BUG,就是在input标签输入框中输入完数据后,直接点击“取消” 按钮的时候.出现网页崩死的情况: 经过小主酸菜我,各种方法的尝试后,找到一个初步可以解决的方案,在这里分享给大 ...

  3. js事件处理程序详解,html事件处理程序,dom0级事件处理程序,dom2级事件处理程序

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/24/js%e4%ba%8b%e4%bb%b6%e5%a4%84%e7%90%86%e ...

  4. 注册事件处理程序onclick和addEventListener、attachEvent

    一.设置HTML标签属性为事件处理程序(注意和下面的设置javascript对象属性为事件处理程序是不同的) 用于设置文档元素事件处理程序属性也能化成对应的HTML标签的属性.如果这样做,属性值应该是 ...

  5. XSS 前端防火墙(1):内联事件拦截

    关于 XSS 怎样形成.如何注入.能做什么.如何防范,前人已有无数的探讨,这里就不再累述了.本文介绍的则是另一种预防思路. 几乎每篇谈论 XSS 的文章,结尾多少都会提到如何防止,然而大多万变不离其宗 ...

  6. js事件流、事件处理程序/事件侦听器

    1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...

  7. JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw

    参考资料: 慕课网 DOM事件探秘    js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数 ...

  8. JS事件(一)事件流&事件处理程序

    1.事件流描述的是从页面接收事件的顺序 IE和Netscape提出了几乎完全相反的事件流概念 IE:事件冒泡(由内而外) Netscape:事件捕获(由外向内) DOM2级事件规定事件流包括三个阶段: ...

  9. JS——事件流与事件处理程序

    1.事件流:从页面中接收事件的顺序 1.1 IE :事件冒泡流1.2 Netscape :事件捕获1.3 DOM事件流 :事件捕获阶段——事件目标阶段——事件冒泡阶段DOM2级事件规定 :捕获阶段不会 ...

随机推荐

  1. 2018-8-10-win10-uwp-httpClient-登陆CSDN

    title author date CreateTime categories win10 uwp httpClient 登陆CSDN lindexi 2018-08-10 19:16:53 +080 ...

  2. Linux系统分辨率设置

    linux 设置分辨率 如果你需要在linux上设置显示屏的分辨率,分两种情况:分辨率模式存在与分辨率模式不存在,具体如下. 1,分辨率模式已存在 1)如何查询是否存在: 图形界面:在System S ...

  3. eclipse调试代码无法查看jdk变量解决方法

    1.无法查看jdk变量原因 oracle在公司在编译jdk的时候,把debug给关闭了,现在需要我们自己重新打包编译一次 2.eclipse创建一个普通java项目,取名叫jdk 3.导入jdk源码, ...

  4. Java访问数组

    package java03; /* 使用动态初始化数组的时候,其中的元素会自动拥有一个默认值,规则如下: 如果是整数类型,默认为0 如果是浮点类型,默认为0.0 如果是字符类型,默认为'\u0000 ...

  5. OpenCV常用基本处理函数(8)图像变换

    傅里叶变换 傅里叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅里叶变换就表示f的频谱. 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙 ...

  6. C/C++ C++ 11 std::bind()

    { #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA ...

  7. yum工具入门

    一yum介绍 注意学完了yum之后,rpm的使用频率就少了.有些功能yum用起来不如rpm更方便. CentOS: yum, dnfYUM: Yellowdog Update Modifier,rpm ...

  8. Code First 延迟装入特性

    使用ORM框架,基本上都会添加“延迟装入”的特性支持,当使用Entity Framwork 的objectContext与DbContext操作数据时,默认都使用“延迟装入”,也就是当我们在应用程序里 ...

  9. 服务化改造的云上利器 | 阿里云 EDAS 重大升级发布

    11月22日,广东云栖大会企业级互联网架构专场上,阿里云发布了全新版本的企业级分布式应用服务EDAS. 新版本增强了对主流微服务框架的原生支持,实现SpringCloud & Dubbo用户代 ...

  10. linux下关闭Oracle及关机

    参考了如下文章 linux环境下连接oracle 并操作oracle数据库 1 先看lsnrctl和oracle service是否都启动了.如果没有启动,先启动:如net start,启动所有服务. ...