js 代码位置不同,导致随着点击函数执行次数累加

每个人书写代码的习惯都不同吃,思想也都不一样,但在工作中为了减少工作量与时间,难免遇到要用别人写的代码。这次在使用同事的代码中,偶然发现的问题,因为js不好,所以一眼也没发现问题所在,查了查网上才知道这是由于重复绑定导致的。如下所示:

function showAlt(){
	if($("div.alert").length > 0){
		$("div.alert").show();
	}else{
		var html = ‘<div class="alert" style="border:1px solid #ccc; padding:20px;">hello world!</div>‘;
		$("body").append(html);
	}
	$(".alert").on("click",function(){
		console.log("alert1");
		$(this).hide();
	});
}
$("#login").click(function(){
	showAlt();
});

那么,每次点击无论div.alert是否存在、是否绑定过函数,都会再次绑定函数,这就导致了函数多次绑定与多次执行,解决办法如下:

方法1. 在首次加载该标签时绑定即可,如果页面已存在节点说明其已经绑定过,无需再绑定,这样就避免了函数的多次绑定与执行。

function showAlt(){
	if($("div.alert").length > 0){
		$("div.alert").show();
	}else{
		var html = ‘<div class="alert" style="border:1px solid #ccc; padding:20px;">hello world!</div>‘;
		$("body").append(html);
		$(".alert").on("click",function(){
			console.log("alert1");
			$(this).hide();
		});
	}
}

方法2. 每次绑定前先解绑,这里用到了unbind()

function showAlt(){
	if($("div.alert").length > 0){
		$("div.alert").show();
	}else{
		var html = ‘<div class="alert" style="border:1px solid #ccc; padding:20px;">hello world!</div>‘;
		$("body").append(html);
	}
	$(".alert").unbind("click").on("click",function(){
		console.log("alert1");
		$(this).hide();
	});
}

如果用的是方法live(貌似jq1.8版本后就取消了这个函数了)绑定的函数,那就需要die()了

方法3. 使用事件委托为标签绑定函数,事件委托的方法有on()、delegate(),这里就不过多介绍了

function showAlt(){
	if($("div.alert").length > 0){
		$("div.alert").show();
	}else{
		var html = ‘<div class="alert" style="border:1px solid #ccc; padding:20px;">hello world!</div>‘;
		$("body").append(html);
	}
}
$("body").on("click",".alert",function(){
	console.log("alert1");
	$(this).hide();
});

  

  

时间: 2024-10-08 21:48:25

js 代码位置不同,导致随着点击函数执行次数累加的相关文章

如何才能优雅地书写JS代码

第一:关于匿名函数的使用 要避免全局变量泛滥, 可以考虑使用匿名函数, 把不需要在外部访问的变量或者函数限制在一个比较小的范围内. 例如以下代码: <script> function func1(){ var list = ["a", "b", "c"]; for(var i = 0; i < list.length; i++){ //.. }; } func1(); // 自动运行 </script> 上述代码的作

1在html中添加js代码的三种方式

1.第一种方式:在时间句柄后太假js代码: 例如浏览器弹出对话框; 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 2 "http://www.w3.org/TR/html4/loose.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content=&qu

js代码放在head和body的区别(QRCode生成)

1.在head中时,所代表的functions只加载而不执行,执行是在某一事件触发后才开始. 2.在body中时,直接加载并执行 典型的区别: 如果有不在函数中的执行语句,比如变量初始化,如果在head中就不会执行. 举个栗子: 这段代码会生成一个二维码,二维码的跳转地址为text中超链接 a.js放在body中,可生成二维码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> &

python 调用js代码

Python2   安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 ctxt = PyV8.JSContext() ctxt.enter() # 创建一个jsContext对象并进入 ctxt.eval(js_str) # 执行js代码 接下来就可以使用这个ctxt来执行js脚本了.主要有两种用途: 1.调用js中的方法: #把strEnc绑定到js中的strEnc方

JS代码存放的位置

方式一:直接在HTML网页中编写JS代码,直接使用<script></script>标签包裹起来,可以放在html里面的任何位置,推荐放在<head></head>区域中.该方式JS代码冗余,不利于程序的维护 方式二:单独编写一个js文件(.js),在使用的html/jsp中通过<script src="index.js"> </script>标签引入该技术文件,该方式实现了js代码和HTML页面的分离,有利于程序

JS代码的位置与事件响应代码块的封装问题

JS代码的位置 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分.   放在<head>部分最常用的方式是在页面中head部分放置<script>元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分.   放在<body>部分JavaScript代码在网页读取到该语句的时候就会执行. ? 注意 Javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后

js数组特定位置元素置空,非null和undefined,实现echarts现状图效果;谷歌格式化压缩js代码

一.想要实现eCharts线状图表的断点效果,如图 这种效果,在设置数据的时候应该是这样: data:[, 2, 3, , 5, 6, 7]:但是想要动态添加数据,实现方式有两种 1.拼接字符串法:var str='[, 2, 3, , 5, 6, 7]';var arr=eval(str); 2.改变数组长度法: var arr=[]; for(var i=1;i<8;i++){ if(i==1||i==4){ arr.length=arr.length+1; continue; }arr.p

点击按钮 倒计时60秒方可再次点击发送的Js代码

本节内容:Javascript 实现 点击按钮 倒计时60秒方可再次点击发送的效果. 比如,一些网站上的手机短信认证的功能,有类似实现点击按钮后,倒计时60秒才能再次点击发送的效果. 本文用Javascript实现点击按钮后,倒计时60秒才能再次点击发送验证码的功能. 例子: 复制代码代码示例: <input type="button" id="btn" value="免费获取验证码" /><script type="

JS移动li行数据,点击上移下移(是位置的互换,不是top的偏移量改变)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta content="text/html; cha