# 1、什么是事件
浏览网页时,当我们做出点击鼠标、按键盘、移动鼠标等行为时,这些行为会被浏览器内置的JavaScript引擎所捕获,并执行对应的某些操作(函数)。那么你的行为(动作)+ JavaScript引擎捕获 + 执行对应的操作 = 事件。
所以,一个完整的事件应该包括:
* 用户行为;
* 浏览器捕获你的行为;
* 执行对应的操作(函数)
常见行为有:鼠标点击、鼠标的移动、鼠标的移入和移出、键盘控制等等。
事件的作用是:通过事件,我们(浏览网页的人)就可以和浏览器进行一些交互了。
# 2、事件绑定方式
语法:
```
node.事件名 = function(){
//事件被触发时,执行这个函数。
};
//例如
document.getElementById('btn').onclick = function(){
console.log('你点击我了');
}
```
```
<input type="button" value="点我试试" id="btn" />
<input type="text" id="username" value="请输入用户名" />
<script>
//找到要绑定事件的元素节点
var btn = document.getElementById('btn');
//单击事件
btn.onclick = function(){
alert('你真敢点');
};
//找到username,绑定获取焦点事件
document.getElementById('username').onfocus = function () {
document.getElementById('username').value = '';
};
</script>
```
在事件处理函数中,this表示绑定事件的那个元素:
所以上面获得焦点的事件可以优化代码为:
![](https://img.kancloud.cn/1c/bd/1cbded0f134bc02c3c327fc4aa521d1b_727x146.png)
练习:
页面中有很多个td,点击td的时候,让td的背景颜色发生变化:
> HTML代码:
```
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
```
> css代码:
```
<style>
table,td{
border:solid 1px #ccc;
border-collapse: collapse; /*合并边框*/
}
td{
width:150px;
height:50px;
/*color:rgb(30,50,10);*/
}
table{
margin:10px auto; /*让表格左右居中对齐*/
}
</style>
```
> JS代码:
```
<script>
//点击页面中的td,点击之后,让被点击的td背景颜色改变成红色
//先找到所有的td
var tds = document.getElementsByTagName('td'); // 返回数组
//循环,为每个td都绑定一个单击事件
for(var i=0; i<tds.length; i++){
tds[i].onclick = function () {
//alert(123);
//this 表示绑定事件的那个td
var r = Math.floor(Math.random()*256);
var g = Math.floor(Math.random()*256);
var b = Math.floor(Math.random()*256);
this.style.backgroundColor = 'rgb('+r+', '+g+', '+b+')';
/*if(this.style.backgroundColor != 'red'){
this.style.backgroundColor = 'red';
}else{
this.style.backgroundColor = 'white';
}*/
};
}
</script>
```
> 效果:
![](https://img.kancloud.cn/89/1f/891f8a160a43b6877f3dc1328e120b77_664x176.png)
# 3、常用事件列举
* 页面事件:
oonload :当页面载入完毕(页面中的标签和外部资源)后触发
* 焦点事件
oonfocus :当获取焦点时触发
oonblur :当失去焦点时触发
* 鼠标事件
oonmouseover :当鼠标悬浮时触发
oonmouseout :当鼠标离开时触发
* 键盘事件
oonkeypress :当键盘按下时触发(如果按住某个键不松开,会一直触发press事件)
oonkeydown :当键盘按下时触发
oonkeyup :当键盘弹起时触发
* 其他事件:
oonchange :内容改变时会触发,常用于select>option。
oonsubmit :表单提交时触发,这个事件要给form绑定而不是给提交按钮绑定
oonresize : 页面窗口改变大小时会触发
oonscroll :滚动条滚动时触发
# 4、什么是事件对象
事件对象也是一个对象,它提供了一些属性,这些属性描述了当前事件的特点;
不同的事件中,事件对象也有所差异,比如单击事件中,事件对象会提供pageX和pageY属性,表示点击的点距离页面的距离,比如键盘事件中,事件对象会提供keyCode属性,表示按的是什么键。
总之,事件对象中提供了一些属性,这些属性可以很好的描述当前的事件的特点。
# 5、如何获取对象
* IE浏览器:window.event;
* 火狐浏览器:传递给事件处理函数的形参
下面代码演示获取事件对象的方式:
```
<input type="text">
<script>
document.getElementsByTagName('input')[0].onclick = function(a){
//console.log(a); // IE8+ 支持,获取事件对象的方法
//console.log(window.event); // IE8浏览器
//兼容各个浏览器的获取事件对象的方法
/*var e;
if(window.event){
e = window.event; //IE8
}else{
e = a; // IE8+
}*/
var e = window.event||a;
};
</script>
```
# 6、事件对象常用属性
下面列举一些事件对象中的常用属性:
* keyCode:表示键盘上的键对应的数值。
* altKey:表示是否按了alt键,按了结果为true,没按结果为false(组合按键的时候,才会有作用)
* shiftKey:表示是否按了shift键,按了结果为true,没按结果为false(组合按键的时候,才会有作用)
* ctrlKey:表示是否按了ctrl键,按了结果为true,没按结果为false(组合按键的时候,才会有作用)
* pageX: 鼠标距离页面左边的距离
* pageY: 鼠标距离页面上面的距离
* screenX: 鼠标距离屏幕左边的距离
* screenY: 鼠标距离屏幕上面的距离
下面的代码是获取keyCode的代码:
```
<script>
//在页面中任何位置,按键,当键盘弹起的时候,执行函数
document.onkeyup = function(evt){
//先获取事件对象
var e = window.event||evt; //兼容各个浏览器的获取事件对象的方式
//获取键盘对应的数字
var keyCode = e.keyCode;
//alert(keyCode);
if(keyCode == 13){
alert('您按了回车键');
}
}
</script>
```
- 第一天
- 一、学习目标
- 二、关于JavaScript
- 三、JS语法基础
- 四、变量
- 五、常量
- 六、运算符
- 七、数组
- 八、对象
- 九、数据类型
- 第二天
- 一、昨日复习
- 二、今日目标
- 三、数据类型转换
- 四、流程控制
- 五、函数基础
- 六、作用域
- 七、标准库(内置对象)
- 八、总结
- 第三天
- 一、昨日复习
- 二、今日目标
- 三、DOM介绍
- 四、元素(标签)节点查询操作
- 五、元素(标签)节点增删改操作
- 六、设置/获取元素的css样式
- 七、事件和事件对象
- 八、键盘keyCode对照表
- 第四天
- 一、昨日复习
- 二、今日目标
- 三、DOM之属性节点操作
- 四、DOM对象的通用属性
- 五、DOM获取元素的位置
- 六、事件绑定与移除
- 七、事件对象相关属性和方法使用
- 八、案例--可编辑的表格
- 第五天
- 一、今日目标
- 二、执行流程
- 三、定时器
- 四、闭包
- 五、案例
- 第六天
- 一、昨日回顾
- 二、今日目标
- 三、正则表达式概述
- 四、入门案例
- 五、正则语法
- 六、分组/捕获和反向引用
- 七、匹配中文(utf-8编码)
- 八、环视(断言/零宽断言/正向预测/负向预测)
- 九、正则对象的属性和方法
- 十、支持正则表达式的 String 对象的方法
- 十一、案例
- 十二、PHP中的正则表达式
- 第七天
- 一、昨日回顾
- 二、正则案例
- 三、PHP中的正则表达式
- 四、正则练习
- 五、仿淘宝评分小星星
- 六、标签页效果
- 七、横向下拉菜单
- 第八天
- 一、今日目标
- 二、面向对象编程
- 三、定义对象
- 四、对象相关操作
- 五、对象在内存中的存在形式
- 六、原型对象(关键)
- 七、定义对象进阶
- 八、函数进阶
- 第九天
- 一、昨日回顾
- 二、今日目标
- 三、Object
- 四、继承
- 五、this指向总结
- 六、案例(贪吃蛇)
- 第十天
- 一、今日目标
- 二、Ajax概述
- 三、工作原理
- 四、XMLHttpRequest对象介绍
- 五、使用Ajax的步骤
- 六、细节问题
- 七、JSON
- 八、Ajax中,服务器返回json格式的数据
- 九、案例--省市县三级联动
- 第十一天
- 一、昨日回顾
- 二、今日目标
- 三、完成省市县三级联动
- 四、优化省市县三级联动
- 五、服务器返回XML格式的数据
- 六、FormData对象
- 七、跨域请求
- 八、实现跨域请求
- 第十二天
- 一、Ajax回顾
- 二、今日目标
- 三、jQuery概述
- 四、快速入门
- 五、可编辑的表格
- 六、纵向导航菜单
- 七、横向导航菜单
- 八、标签页效果
- 第十三天
- 一、学习目标
- 二、杂项
- 三、jQuery中的事件
- 四、jQuery封装的Ajax
- 五、案例 -- 无刷新的分页
- 第十四天
- 一、昨日回顾
- 二、效果
- 三、跨域请求
- 四、文档操作
- 五、插件编写
- 六、自定义插件
- 七、第三方插件