1.什么是事件
事件(Event)是文档或者浏览器窗口中发生的,特定的交互瞬间。事件是javaScript和DOM之间交互的桥梁。你若触发,我便执行——事件发生,调用它的处理函数执行相应的JavaScript代码给出响应。
事件包含三元素:事件源(Source)、事件(Event)、事件处理程序(Handler)。
2.jQuery事件函数
jQuery 事件处理方法是 jQuery 中的核心函数。可以分为:鼠标事件、键盘事件、表单事件和窗口事件四大类。
3.常见鼠标事件
| 事件函数 | 解释 |
|---|---|
| click() | 触发、或将函数绑定到指定元素的单击事件 |
| dblclick() | 触发、或将函数绑定到指定元素的双击事件 |
| mouseover() | 触发、或将函数绑定到指定元素的鼠标经过事件 |
| mouseleave() | 触发、或将函数绑定到指定元素的鼠标离开事件 |
| blur() | 触发、或将函数绑定到指定元素的失去焦点事件 |
| focus() | 触发、或将函数绑定到指定元素的获得焦点事件 |
实例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>jQuery基础教程-鼠标事件</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
.gray {
-webkit-filter: grayscale(1); /* Webkit */
filter: gray; /* IE6-9 */
filter: grayscale(1); /* W3C */
}
</style>
</head>
<body>
<div>
<div>
<input type="text" id="username" value="zhangsan"/><span id="errorMsg"></span>
</div>
<div>
<img src="https://img.simoniu.com/power_off.jpg" id="power" style="cursor: pointer"/>
</div>
<div>
<img src="https://img.simoniu.com/beatiful_girl01.jpg" id="girl" style="cursor: pointer"/>
</div>
</div>
<script>
let flag = false;
$(function(){
$("#username").blur(function(){
if(this.value.length<=0){
$("#errorMsg").text('用户名不能为空!').css("color","red");
}else{
$("#errorMsg").text('')
}
})
$("#power").dblclick(function(){
flag = !flag;
if(flag){
$("#power").attr("src","https://img.simoniu.com/power_on.jpg");
}else{
$("#power").attr("src","https://img.simoniu.com/power_off.jpg");
}
})
$("#girl").mouseover(function(){
console.log('mouseover');
$("#girl").addClass("gray");
})
$("#girl").mouseleave(function(){
console.log('mouseleave');
$("#girl").removeClass("gray");
})
})
</script>
</body>
</html>

4.常用键盘事件
| 事件函数 | 解释 |
|---|---|
| keydown() | 触发、或将函数绑定到指定元素的 key down 事件 |
| keypress() | 触发、或将函数绑定到指定元素的 key press 事件 |
| keyup() | 触发、或将函数绑定到指定元素的 key up 事件 |
实例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>jQuery基础教程-键盘事件</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div>
用户名:<input type="text" id="username" value=""/><br>
电子邮箱:<input type="text" id="email" value=""/><br>
</div>
<script>
$(function(){
$("#username").keypress(function(e){
console.log("in keypress username:"+$("#username").val());
console.log("in keypress keycode:"+e.keyCode);
})
$("#email").keydown(function(e){
console.log("in keydown email:"+$("#email").val());
console.log("in keydown keycode:"+e.keyCode);
})
$("#username,#email").keyup(function(){
console.log("in keyup username:"+$("#username").val());
console.log("in keyup email:"+$("#email").val());
})
})
</script>
</body>
</html>
keydown,keypress,keyup三者之间的区别: 按下键盘时会触发键盘事件,顺序为keydown -> keypress ->keyup。 keydown、keypress事件触发在文字还没敲进文本框,这时如果在keydown、keypress事件中输出文本框中的文本,得到的是触发键盘事件前的文本,而keyup事件触发时整个键盘事件的操作已经完成,获得的是触发键盘事件后的文本。
keypress与keydown与keyup的主要区别: (1)对中文输入法不友好,无法响应中文输入; (2)无法响应系统功能键(比如delete,backspace); (3)由于前面两个限制,keyCode与keydown和keyup不是很一致;keypress的keyCode参照ASCII。而keydown与keyup的keyCode参照下图。

5.表单事件
| 事件函数 | 解释 |
|---|---|
| submit() | 触发表单的 submit 事件 |
| change() | 触发指定元素的change 事件 |
实例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>jQuery基础教程-表单事件</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div>
<form id="loginForm" action="loginok.html" method="get">
用户名:<input type="text" id="username" value="">
籍贯: <select id="province" value=""></select> <select id="city" value=""></select>
<input type="submit" value="登录"/>
</form>
</div>
<script>
let provinces = ['河北','河南','山东','山西'];
let citys =[
['石家庄','保定','沧州','唐山','邯郸'],
['郑州','洛阳','开封','南阳','驻马店'],
['济南','青岛','泰安','烟台','日照'],
['太原','大同','晋中','运城','临汾'],
];
let currentProvinceIndex = 0;
//初始化省份列表
function initProvinceList(){
provinces.forEach(function(v,i){
let provinceHTML ="";
if(i==0){
provinceHTML = '<option selected>'+v+'</option>'
}else{
provinceHTML = '<option>'+v+'</option>'
}
$("#province").append(provinceHTML);
});
}
//初始化城市列表
function initCityList(index){
$("#city").empty();
citys[currentProvinceIndex].forEach(function(v,i){
let cityHTML ="";
if(i==0){
cityHTML = '<option selected>'+v+'</option>'
}else{
cityHTML = '<option>'+v+'</option>'
}
$("#city").append(cityHTML);
});
}
$(function(){
initProvinceList();
initCityList(currentProvinceIndex);
$("#province").change(function(){
currentProvinceIndex = $("#province").get(0).selectedIndex;
//更新城市列表
initCityList(currentProvinceIndex);
})
$("#loginForm").submit(function(){
console.log('执行登录...');
if($("#username").val().length<=0) {
alert('用户名不能为空!');
return false; //返回 false 则不执行表单提交。
}
let username = $("#username").val();
let provice = $("#province").val();
let city = $("#city").val();
alert("登录成功,用户名:"+username+" 籍贯:"+provice+","+city);
return true;
})
})
</script>
</body>
</html>

6.窗口事件
| 事件函数 | 解释 |
|---|---|
| load() | 触发、或将函数绑定到指定元素的 load 事件 |
| resize() | 触发、或将函数绑定到指定元素的 resize 事件 |
| scroll() | 触发、或将函数绑定到指定元素的 scroll 事件 |
实例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>jQuery基础教程-窗口事件</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div>
<img style="width: 30%" src="https://img.simoniu.com/%E6%B5%8B%E8%AF%95%E7%94%A8%E5%A3%81%E7%BA%B8001.jpg" id="mypic"/>
<br>
<textarea rows="20" cols="40" id="content" placeholder="写点什么吧!">
</textarea>
</div>
<script>
$("#mypic").on('load',function(){
alert('图片加载完毕!');
})
$(function(){
$(window).resize(function(){
let w = window.innerWidth;
let h = window.innerHeight;
console.log('正在更改尺寸....,width:'+w+",height:"+h);
})
})
</script>
</body>
</html>