jQuery——入门(四)JQuery 事件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39680839/article/details/78120270
 
 

                                                   jQuery——入门(四)JQuery 事件

一、事件初探

加载文档完成触发:

window.onload = function(){}   //js

$(window).load(function(){})   //jquery

$(document).ready(function(){})

事件可以多次执行

代码可以简写:$(function(){})

二、JQuery中常见的事件

在网页浏览过程中,会触发各种各样的事件,这些事件的处理能很大程度的提升用户使用的体验,对于常见事件的了解是JS程序开发必不可少的一部分。

方法 描述
bind() 向匹配元素附加一个或更多事件处理器
blur() 触发、或将函数绑定到指定元素的 blur 事件
change() 触发、或将函数绑定到指定元素的 change 事件
click() 触发、或将函数绑定到指定元素的 click 事件
dblclick() 触发、或将函数绑定到指定元素的 double click 事件
delegate() 向匹配元素的当前或未来的子元素附加一个或多个事件处理器
die() 移除所有通过 live() 函数添加的事件处理程序。
error() 触发、或将函数绑定到指定元素的 error 事件
event.isDefaultPrevented() 返回 event 对象上是否调用了 event.preventDefault()。
event.pageX 相对于文档左边缘的鼠标位置。
event.pageY 相对于文档上边缘的鼠标位置。
event.preventDefault() 阻止事件的默认动作。
event.result 包含由被指定事件触发的事件处理器返回的最后一个值。
event.target 触发该事件的 DOM 元素。
event.timeStamp 该属性返回从 1970 年 1 月 1 日到事件发生时的毫秒数。
event.type 描述事件的类型。
event.which 指示按了哪个键或按钮。
focus() 触发、或将函数绑定到指定元素的 focus 事件
keydown() 触发、或将函数绑定到指定元素的 key down 事件
keypress() 触发、或将函数绑定到指定元素的 key press 事件
keyup() 触发、或将函数绑定到指定元素的 key up 事件
live() 为当前或未来的匹配元素添加一个或多个事件处理器
load() 触发、或将函数绑定到指定元素的 load 事件
mousedown() 触发、或将函数绑定到指定元素的 mouse down 事件
mouseenter() 触发、或将函数绑定到指定元素的 mouse enter 事件
mouseleave() 触发、或将函数绑定到指定元素的 mouse leave 事件
mousemove() 触发、或将函数绑定到指定元素的 mouse move 事件
mouseout() 触发、或将函数绑定到指定元素的 mouse out 事件
mouseover() 触发、或将函数绑定到指定元素的 mouse over 事件
mouseup() 触发、或将函数绑定到指定元素的 mouse up 事件
one() 向匹配元素添加事件处理器。每个元素只能触发一次该处理器。
ready() 文档就绪事件(当 HTML 文档就绪可用时)
resize() 触发、或将函数绑定到指定元素的 resize 事件
scroll() 触发、或将函数绑定到指定元素的 scroll 事件
select() 触发、或将函数绑定到指定元素的 select 事件
submit() 触发、或将函数绑定到指定元素的 submit 事件
toggle() 绑定两个或多个事件处理器函数,当发生轮流的 click 事件时执行。
trigger() 所有匹配元素的指定事件
triggerHandler() 第一个被匹配元素的指定事件
unbind() 从匹配元素移除一个被添加的事件处理器
undelegate() 从匹配元素移除一个被添加的事件处理器,现在或将来
unload() 触发、或将函数绑定到指定元素的 unload 事件
三、JQuery绑定事件方式

1、事件快捷键绑定方式

语法:$(selector).eventType(fn);

案例:$(".box").click(function(){... ...});给box选中的元素增加一个鼠标单击事件

问题:不适用于未来元素/新增元素;比较消耗系统资源

代码案例:

<body>
	<button>按钮</button>
	<p>我是一个p标签内容</p>
	<div class="box"></div>
	<script type="text/javascript">
		$(function(){
			$("button").click(function(){
				$("p").toggle(500);
			});
			var newEle = $("<button></button>");
			newEle.text("新增按钮");
			newEle.prependTo($(".box"));
		});
	</script>
</body>

2、JQuery在快捷事件处理方式之外提供了四种绑定事件的方式

(1)、bind(遗留项目中比较多出现的绑定方式 | 不支持未来元素)

(2)、live(遗忘 | 支持未来元素,但是新版本已经删除)

(3)、delegate(处理遗留项目时选择的兼容模式绑定项目 | 支持未来元素)

(4)、on官方及项目组规范 | 不支持 / 支持未来元素)

同时对应了四种解除事件监听的四种方式:

unbinddie 、undelegate 、off

3、绑定事件

语法:bind(type、[data]、function)

type为事件类型,包括 blur、focus、load、resize、scroll、unload、click、dblclick、mousedown、mouseup、mousemove、mouseout、mouseenter、mouseleave、change、select、submit、keyup等。

data为方法传递的参数,可以忽略

function是用来绑定的处理函数

例如:为id为box的div元素绑定单击事件

$("#box").bind("click",function(){alert(“box被点击”);})

(1)、绑定单个事件

bind(“事件名”,function(){})

注:当页面元素加载时,bind查询到对应的DOM节点,一个一个绑定对应的事件

当页面元素是后续动态添加进去的,bind绑定事件在新元素上是没有效果的

不适用于未来元素 / 新增元素

on(“事件名”,function(){})

注:官方推荐的事件绑定的方式,也是项目中用的最多的方式

不适用于未来元素 / 新增元素

(2)、绑定多个事件

一个jquery对象可以绑定多个事件,对应一个函数 jquery对象.bind(“事件名1 事件名2 ...”,function(){})

还可以绑定多个事件各个事件各对应一个方法

jquery对象.bind({“事件名1”:function(){},"事件名2":function(){},...})

on({“事件名1”:function(){},"事件名2":function(){},...}) 适用于未来元素 / 新增元素

代码案例:

<body>
	<button>hello</button>
	<script>
		$(function(){
//			$("button").click(function(){
//				alert("hello world");
//			});
//			$("button").click(function(){
//			alert("hello world2");
//				});
			$("button").bind("click mouseover",function(){
				alert("hello world");
			});

			$("button").bind({
				"mouseover":function(){alert("hello world");},
				"mouseout":function(){alert("你好世界");}
			});
		});
	</script>
</body>

(3)、一次性绑定事件 —— on 官方推荐

on(“事件名”,function(){})

代码案例:

<body>
	<button>点击</button>
	<div></div>
</body>
	<script type="text/javascript">
		$(function(){
			var i=0;
//			$("button").on("click",function(){
//				i++;
//				$("div").html(i);
//			});
//jquery对象.one("事件名",function(){})   一次性事件
			$("button").one("click",function(){
				i++;
				$("div").html(i);
			});
		});
	</script>

(4)、live && die

live方法:可以对动态新增的元素添加绑定事件,解决了bind()不能给动态新增元素绑定事件的问题

注意:新版本中已经删除了live()绑定事件,通常使用delegate(...)、on(...)进行替代

适用于未来元素 / 新增元素 ,测试时请使用jquery1.9以下版本

例如:$("button").live("click",function(){

$("p").toggle(500);

})

die方法:解除指定元素上的所有事件

注意:die方法不再建议使用,旧版本替换可以使用$(selector).off()函数进行解除

(5)、解除绑定 / 事件移除 —— unbind、off

unbind("事件名") 可以解除多个事件

off("事件名") 官方推荐的解除事件绑定的方式,项目中用的最多的解除方式

注:解除绑定事件 jquery对象.unbind(参数) 参数是可选的,如果里面没有参数的时候 解除jquery对象上所有的事件绑定
如果有参数, 代表可以指定去解除单个或多个事件

代码案例:

<body>
	<button>按钮</button>
	<script type="text/javascript">
		$(function(){
			$("button").bind("click mouseover mouseout",function(){
				alert("hello world");
			});
//			$("button").unbind("click mouseover");  //只有在鼠标离开按钮时出现hello world,鼠标点击和鼠标放上去均无效
//			$("button").unbind();    //解除所有事件
			$("button").off("click mouseover"); //和$("button").unbind("click mouseover")实现效果一样
		});
	</script>
</body>

4、事件合成

JQuery有两个合成事件:hover()方法和toggle()方法

hover(enter,leave)

jquery对象.hover(函数1,函数2) 鼠标放上去时 调用函数1 鼠标离开时 调用函数2

用于模拟光标悬停事件.当光标移动到元素上时,会触发指定的第一个函数,当光标移出这个元素时,触发指定的第二个函数.

toggle(fn1,fn2,…fnN)

模拟光标连续点击事件.第一次单击元素触发fn1,第二次点击时触发fn2,依次类推.随后的单击都会重复对这几个函数的轮番调用.
jquery9版本已经删除了此种应用

代码案例:

<body>
	<div>hello world</div>
</body>
	<script type="text/javascript">
		$(function(){
			$("div").hover(function(){
				$(this).css("background-color","red");  //鼠标放上去显示红色背景
			},function(){
				$(this).css("background-color",""); //鼠标离开时没有背景
			});
			$("div").toggle(function(){  //点击三次hello world时依次显示红色、蓝色、绿色
				$(this).css("background-color","red");
			},
			function(){
				$(this).css("background-color","blue");
			},
			function(){
				$(this).css("background-color","green");
			});
		})
	</script>

5、 事件冒泡 && 默认行为

(1)、阻止事件冒泡的方法:

在绑定的事件中加入event参数,并在函数中增加event.stopPropagation()调用就可以阻止事件冒泡,也可以使用return false阻止冒泡

案例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#parent{width:400px;height:400px;background:red}
			#child{width:200px;height:200px;background:yellow}
		</style>
		<script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="parent">
			<div id="child"></div>
		</div>
	</body>
	<script type="text/javascript">
		$(function(){
			$("#parent").click(function(e){
				alert("hello,parent被点击");
			});
			$("#child").click(function(ev){
				alert("hi,child被点击");
				ev.stopPropagation();  //阻止冒泡 ,点击child时,只会显示“hi,child被点击”
			})
		});
	</script>
</html>

(2)、阻止事件默认行为

event中还有一个方法:event.preventDefault();作用是阻止默认行为,如表单提交!

代码案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>阻止默认行为</title>
		<script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<a href="#">我是超链接</a>
		<div>我是超链接</div>
	</body>
	<script type="text/javascript">
		$(function(){ //第一种
//			$("a").click(function(e){
//				e.preventDefault();
//			});
			$("a").on("click",function(e){  //第二种
				e.preventDefault();
			});
		});
	</script>
</html>
6、 模拟操作 —— trigger()

(1)、模拟操作可以使用trigger()方法来完成

例如:$("#box").click(function(){

$("#btn").trigger("click"); //模拟操作触发的#btn的click事件

})

代码案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<button>点击我,有惊喜</button>
		<input type="text" />
		<div>hello,需要点击我模拟</div>
		<script type="text/javascript">
			$(function(){
				$("button").click(function(){
					alert("果然有惊喜"); //2.点击button,再次弹出“果然有惊喜”
				});
				$("button").trigger("click"); //1.开始弹出“果然有惊喜”
				$("div").click(function(){
					$("button").trigger("click"); //3.点击div时,弹出“果然有惊喜”
				})
				$("input").focus(function(){  //4.input边框变为红色
					$(this).css("border","1px solid red");
				});
				$("input").trigger("focus");
				$("input").triggerHandler("focus");//triggerHandler()不会触发默认行为,而只执行事件代码.
			});
		</script>
	</body>
</html>

(2)、模拟操作 —— 传递数据

trigger(type,[data])方法有两个参数,第一个参数是要触发的事件类型,第二个参数是传递给事件处理函数的附加数据,以数组的形式传递

#(“#btn”).bind("click",function(event,mes,mes2){

alert(mes+","+mes2);

})

$("#btn").trigger("click",["hello","world!"]);

注意:在事件绑定时的event参数是不可以省略的,但在调用时可以不指定

猜你喜欢

转载自blog.csdn.net/weixin_39680839/article/details/78120270