jQuery中防止重复绑定事件的问题

news/2024/7/11 1:18:59 标签: jquery, unbind, bind

在工作当中,有这样的场景,对于一个按钮,在某些条件下,属于可点击状态,在另一些条件下,属于不可点击状态,可能我们就会通过jQuery动态的绑定事件,解绑事件,但此时,就要小心了,防止自己掉进重复绑定事件的问题上。

1、问题

在jQuery中,对于一个元素标签,是可以进行重复绑定事件的,比如下面的代码,button按钮就绑定了两次click事件,每次点击,触发了两次代码的执行。

<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<title>bind多次绑定问题</title>
	<script type="text/javascript" src="jquery.min.js"></script>
	<script type="text/javascript">
		function register_click(){
			$('#button').click(function(){
				alert('button click');
			});
			}
	
		$(function(){
			//重复注册
			register_click();
			register_click();
			
			//模拟点击,会出现两次alert
			$('#button').click();
		});
	</script>
</head>

<body>
	<button id="button">按钮</button>
</body>

</html>

2、解决方法

对于需要重复绑定事件的场景,在注册事件的时候首先bind>unbindbind,或者先off后on,代码如下:

<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<title>bind多次绑定问题</title>
	<script type="text/javascript" src="jquery.min.js"></script>
	<script type="text/javascript">
		/*function register_click(){
			$('#button').bind>unbind('click').bind('click',function(){
				alert('button click');
			});
		}*/
		
		function register_click(){
			$('#button').off('click').on('click',function(){
				alert('button click');
			});
		}
	
		$(function(){
			//重复注册
			register_click();
			register_click();
			
			//模拟点击
			$('#button').click();
		});
	</script>
</head>

<body>
	<button id="button">按钮</button>
</body>

</html>



http://www.niftyadmin.cn/n/1258535.html

相关文章

【 js 工具 】如何使用Git上传本地项目到github?(mac版)

在此假设你已经在 github 上创建好了一个项目&#xff0c;像这样&#xff1a; 并且你已经完成了自己的项目代码&#xff0c; 同时你也已经安装了 git&#xff0c;然后 lets start. 首先&#xff0c;建一个文件夹比如文中演示的是 微信小程序 文件夹&#xff0c;然后打开的你的终…

springmvc配置servlet的注意事项

今天用springmvc搭建项目时&#xff0c;遇到了一个以前没有注意到的问题&#xff0c;在此记录一下。 问题描述 web.xml&#xff08;部分配置&#xff09; <welcome-file-list>welcome-file>/index.jsp</welcome-file> </welcome-file-list><!-- sprin…

ASCII,Unicode和UTF-8

1. ASCII码 我们知道&#xff0c;在计算机内部&#xff0c;所有的信息最终都表示为一个二进制的字符串。每一个二进制位&#xff08;bit&#xff09;有0和1两种状态&#xff0c;因此八个二进制位就可以组合出256种状态&#xff0c;这被称为一个字节&#xff08;byte&#xff09…

three.js入门

1.下载three.js库。https://github.com/mrdoob/three.js/ 第一步&#xff1a;新建一个项目文件夹“Threejs” 第二步&#xff1a;在Threejs文件夹内新建一个html文件&#xff08;index.html&#xff09;。该文件是通过浏览器进入游戏的入口。 第三步&#xff1a;在Threejs文件夹…

java中Unicode码与中文的转化

什么是unicode码 unicode&#xff08;统一码、万国码、单一码&#xff09;是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的&#xff0c;它为每种语言中的每个字符设定了统一并且唯一的二进制编码&#xff0c;以…

Codeforces 刷水记录

Codeforces-566F 题目大意&#xff1a;给出一个有序数列a,这个数列中每两个数&#xff0c;如果满足一个数能整除另一个数&#xff0c;则这两个数中间是有一条边的&#xff0c;现在有这样的图&#xff0c;求最大联通子图。 题解&#xff1a;并不需要把图搞出来&#xff0c;可以直…

Linux学习-HTTP首部

HTTP首部 1. Accept&#xff1a;告诉web服务器自己接受什么介质类型&#xff0c;*/*表示任何类型&#xff0c;type/*表示该类型下的所有子类型&#xff0c;type/sub-type表示该类型下的指定子类型。 2. Accept-Charset&#xff1a;浏览器申明自己接收的字符集Accept-Encoding&…

Linux学习-Varnish

Web Cache Varnish官网 两个组件衔接不流畅&#xff0c;加中间层&#xff0c;衔接上性能不匹配&#xff0c;加缓存 注&#xff1a; 缓存对象&#xff1a;生命周期&#xff0c;定期清理&#xff0c; 缓存空间耗尽&#xff1a;LRU(Least Recent Use)最近最少使用 可缓存&#xf…