事件一般是用于浏览器和用户操作进行交互。最早是 IE 和 Netscape Navigator 中出现, 作为分担服务器端运算负载的一种手段。直到几乎所有的浏览器都支持事件处理。而 DOM2 级规范开始尝试以一种复合逻辑的方式标准化 DOM 事件

JavaScript 有三种事件模型:内联模型、脚本模型和 DOM2 模型

内联模型

这种模型是最传统接单的一种处理事件的方法。在内联模型中,事件处理函数是 HTML 标签的一个属性,用于处理指定事件。虽然内联在早期使用较多,但它是和 HTML 混写的, 并没有与 HTML 分离

//在 HTML 中把事件处理函数作为属性执行 JS 代码
<input type="button" value="按钮" onclick="alert('abc');" /> //注意单双引号
//在 HTML 中把事件处理函数作为属性执行 JS 函数
<input type="button" value="按钮" onclick="box();" /> //执行 JS 的函数,函数不得放到 window.onload 里面,这样就看不见了

脚本模型

由于内联模型违反了 HTML 与 JavaScript 代码层次分离的原则。为了解决这个问题,我 们可以在 JavaScript 中处理事件。这种处理方式就是脚本模型

var input = document.getElementsByTagName('input')[0]; //得到 input 对象
input.onclick = function () { //匿名函数执行
alert('abc');
};

通过匿名函数,可以直接触发对应的代码。也可以通过指定的函数名赋值的方式 来执行函数(赋值的函数名不要跟着括号)

input.onclick = box; //把函数名赋值给事件处理函数

事件处理函数

JavaScript 可以处理的事件类型为:鼠标事件、键盘事件、HTML 事件

部分事件处理函数 :

事件处理函数 影响的元素 何时发生
onchange 输入框,选择框和文本区域 当改变一个元素的值且失去焦点时
onclick 链接、按钮、表单对象、图像映射区域 当用户单击对象时
ondblclick 链接、按钮、表单对象 当用户双击对象时
onkeydown 文档、图像、链接、表单 当按键被按下时
onkeyup 文档、图像、链接、表单 当按键被松开时
onkeypress 文档、图像、链接、表单 当按键被按下然后松开时
onload 主题、框架集、图像 文档或图像加载后
onunload 主体、框架集 文档或框架集卸载后
onmove 窗口 当浏览器窗口移动时
onselect 表单元素 当选择一个表单对象时
onsubmit 表单 当发送表格到服务器时
onreset 表单复位按钮 单击表单的 reset 按钮

所有的事件处理函数都会都有两个部分组成,on + 事件名称,例如 click 事件的事 件处理函数就是:onclick。对于每一个事件,它都有自己的触发范围和方式,如果超出了触发范围和方式,事件处理将失效

1.鼠标事件,页面所有元素都可触发

click:当用户单击鼠标按钮或按下回车键时触发

input.onclick = function () { alert('abc'); };

dblclick:当用户双击主鼠标按钮时触发

input.ondblclick = function () { alert('abc'); };

2.键盘事件

keydown:当用户按下键盘上任意键触发,如果按住不放,会重复触发

onkeydown = function () {
alert('abc');
};

keypress:当用户按下键盘上的字符键触发,如果按住不放,会重复触发

onkeypress = function () { alert('abc'); };

keyup:当用户释放键盘上的键触发

onkeyup = function () { alert('abc'); };

3.HTML 事件

load:当页面完全加载后在 window 上面触发,或当框架集加载完毕后在框架集上触发

window.onload = function () { alert('abc'); };

unload:当页面完全卸载后在 window 上面触发,或当框架集卸载后在框架集上触发

window.onunload = function () { alert('abc'); };

select:当用户选择文本框(input 或 textarea)中的一个或多个字符触发

input.onselect = function () { alert('abc'); };

change:当文本框(input 或 textarea)内容改变且失去焦点后触发

input.onchange = function () { alert('abc'); };

submit:当用户点击提交按钮在<form>元素上触发

form.onsubmit = function () { alert('abc'); };

reset:当用户点击重置按钮在<form>元素上触发

form.onreset= function () { alert('abc'); };

JavaScript笔记——事件的更多相关文章

  1. javaScript 笔记(4) -- 弹窗 & 计时事件 & cookie

    弹窗 可以在 JavaScript 中创建三种消息框:警告框.确认框.提示框. 警告框:经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行操作. 语法: window ...

  2. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  3. jQuery $(document).ready()和JavaScript onload事件

    jQuery $(document).ready()和JavaScript onload事件 Why we need a right time? 对元素的操作和事件的绑定需要等待一个合适的时机,可以看 ...

  4. js学习笔记---事件代理

    事件机制可以分为捕获型和冒泡型.捕获型是事件由父级元素(DOM)传递到子元素.冒泡型正好相反.事件机制默认为冒泡型.事件机制可以通过参数指定. 事件委托可以将我们绑定在document上的事件自动绑定 ...

  5. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  6. javascript通用事件封装

    随着最近几年Html5的兴起,越来越多的应用采用html5进行实现,一个优秀的网页应用不但需要美观简洁的UI界面,更需要一个良好的交互.网页应用大部分的交互需要用javascript事件进行实现.虽然 ...

  7. javascript的事件

    前戏 今天在博客中看到了javascript的事件机制,就自己试试写一个简单的冒泡捕获测试,但是测试结果出乎了我的意料,主要是自己原来对事件了解不是很清楚,现在写篇博客记录下. 基础 先来看一下我在A ...

  8. [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象

    js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...

  9. [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符

    “1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...

随机推荐

  1. ie7 动态改变select option时,宽度自动变短解决方法

    <html> <head> <title>JQuery</title> <meta http-equiv="pragma" c ...

  2. MailUtils 测试邮件是否发送

    import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail ...

  3. shiro源码解析--------欢迎指出错误地方,还有一起讨论一下ShiroFilterFactoryBean配置过滤URL规则

    啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 ...

  4. mysql-5.7.17的最新安装教程

    mysql-5.7.17-winx64是现在最新版本的Mysql,这是免安装的,所以要进行些配置 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mys ...

  5. Could not publish server configuration for Tomcat v6.0 Server at localhost.错误问题解决

    经常在使用tomcat服务器的时候 总会发生一些莫名其妙的错误. 就像下面这个错误: 在配置文件中存在多个/MyWeb的配置,导致不能发布服务. 错误信息: Could not publish ser ...

  6. Spring Boot打包总结

    环境配置信息 -** JDK 1.8 -** Spring Boot 1.5.3.RELEASE -** IDE: STS 3.4 Spring Boot下打包过程 基于STS创建Spring boo ...

  7. zoj-3963 Heap Partition(贪心+二分+树状数组)

    题目链接: Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence ...

  8. ng $scope与$rootScope的关系

    $scope与$rootScope的关系:①不同的控制器之间 是无法直接共享数据②$scope是$rootScope的子作用域对象$scope的id是随着控制器的加载顺序依次递增,$rootScope ...

  9. C 时间函数总结

    头文件 time.h 处理器时间函数 clock_t clock(void) 处理器的处理时间,如可以在 main开始的地方 使用这个函数,然后再 完毕后 调用这个函数 并 减去 之前的返回值,为了 ...

  10. Friendly ARM linux交叉编译问题解决

    ARM-LINUX-GCC 安装参考:(笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境) 然而安装完成之后运行 arm-linux-gcc -v (注意g ...