事件一般是用于浏览器和用户操作进行交互。最早是 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. No mojo definitions

    pom.xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</gro ...

  2. iOS-免证书真机调试

     使用方法: 1.新建一个普通的项目 2.进入xcode,菜单栏选择xcode –> preferences (快捷键 command + ,) 3.在Accounts选项卡添加自己的Apple ...

  3. elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样

    elasticSearch的配置文件中有2个参数:node.master和node.data.这两个参 数搭配使用时,能够帮助提供服务器性能. 数据节点node.master: false node. ...

  4. 【scala】可变与不可变的理解

    我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...

  5. S3C2440启动方式

    不管S3C2440的启动设备是什么,它都是从0x0000 0000地址开始执行程序的,所不同的是地址的映射不一样.基于S3C2440的嵌入式系统上电之后,需要首选选择启动设备,2440的启动方式选择是 ...

  6. 第七次scrum meeting记录

    文章负责:张华杰 日期:2017年10月31日 会议地点:主楼主南201 各组员工作情况 团队成员 昨日完成任务 明日要完成任务 赵晓宇 课程列表页面搭建 issue20 课程列表页面搭建(part ...

  7. 条款30:透彻了解inline的里里外外。

    inline可以带来各种好处: 首先其可以使得消除函数调用带来的开销,再者编译器对这种非函数的代码可以做出更多的优化策略.   但是inline函数首先肯定是会导致程序代码的大小更加的庞大,这样会带来 ...

  8. svg实现 圆形 点击扩大、消失

    效果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  9. Java虚拟机运行时数据区域划分

        Java虚拟机数据运行时区域 方法区(Method Area) 存储加载的类信息,常量,静态变量,编译器编译后的代码等数据.虽然JVM规范把方法区描述为堆的一个逻辑部分,但它却有一个别名叫做N ...

  10. LINUX命令—让人喜爱的find

    FIND命令的让人喜爱的地方在于其后面跟着的 –exec  可以执行其他linux命令 这点太让人高兴了,不过他的结尾要带一个特殊的结构 {} \: 说说实例: