JS中click事件的累加和重复绑定事件

环境:在一个动态模块框中,由于新增和编辑的样式一样,所以我让两个操作共用一个模态框,而且共用一个提交按钮。但是两个操作放到两个不同的后台地址处理,那么问题来了,我在add和edit时,分别为submit按钮绑定不同的单击事件。我的理想是,点击了add后,submit的单击事件提交到后台的insert,点击edit后,submit的单击事件提交到后台的update。但是实际测试时,发现了一个致命的问题,就是页面是异步加载的,点击过submit后,会随着点击次数的增加,执行多次点击事件。

 

在添加或者编辑事件中存在一个click上传功能,上传就会出现一个Bug,代码如下:

 

function test(){
    var i = 1;
    $("#upload").click(function() {
        alert(i++);
	var barCode2 = trimStr($("#barCode").val());
	if(barCode2 == ""){
		$.alert("请先输入商品编码,然后在上传图片");
		return false;
	}
    }
}

 第一次使用点击upload时会弹出提示框 "1" 和 “请先输入商品编码,然后在上传图片”,此时无论取消编辑或者提交都正常;

 

第二次进入该页面点击upload时会弹出提示框"2",然后接着会弹出提示框"1",紧接着就是两次相同的“请先输入商品编码,然后在上传图片”;

第三次进入该页面点击upload时会弹出提示框 "3"、"2"、"1"、请先输入商品编码,然后在上传图片”....;

第四次进入该页面点击upload时会弹出提示框 "4"、 "3"、"2"、"1"、请先输入商品编码,然后在上传图片”....;

第五次.........

 

出现了这种问题,感觉像是曾经的冒泡和叠加,在网上多次寻找终于找到该问题属于click事件的重复绑定,于是记录下自己的错误和解决方案,不代表公用解决方案:

第一次return false时,会执行弹框事件;

第二次return false时,会寻找回自己的上一层(可以理解为父类)的事件中,知道出现return false,然后出发了自己的点击事件,又执行了弹框事件;

第三次点击事件就绑定了两个输出"3""及弹框,然后冒泡执行了父类的"2"、"1以及两次弹框;

...........

所以感觉每次上层都会记录下层的点击事件触发结果,而在下次触发时会一并触发结果。所以随着点击次数的增多,结果也在不断增多,因为我们不想要触发之前的点击事件,所以就需要每次在点击事件时候清空一下自身绑定,代码如下:

 

function test(){
    var i = 1;
    $("#upload").unbind('click').click(function() {
        alert(i++);
	var barCode2 = trimStr($("#barCode").val());
	if(barCode2 == ""){
		$.alert("请先输入商品编码,然后在上传图片");
		return false;
	}
    }
}

 

这次输出的结果就是自己想要的每次i自增1,并且只会输出一个。。解决。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过JavaScript来实现点击赞成和反对按钮后对应的票数累加。首先,你需要为赞成和反对按钮分别添加点击事件的监听器。然后,在点击事件处理函数,你可以通过修改相应的票数变量来实现累加的效果。以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <body> <h2>投票</h2> <p>赞成: <span id="upvotes">0</span></p> <button id="upvoteBtn">赞成</button> <p>反对: <span id="downvotes">0</span></p> <button id="downvoteBtn">反对</button> <script> // 初始化票数变量 let upvotes = 0; let downvotes = 0; // 获取赞成和反对的按钮元素 const upvoteBtn = document.getElementById('upvoteBtn'); const downvoteBtn = document.getElementById('downvoteBtn'); // 获取显示票数的元素 const upvotesDisplay = document.getElementById('upvotes'); const downvotesDisplay = document.getElementById('downvotes'); // 添加点击事件监听器 upvoteBtn.addEventListener('click', function() { // 点击赞成按钮时,赞成票数加1 upvotes++; // 更新显示的票数 upvotesDisplay.textContent = upvotes; }); downvoteBtn.addEventListener('click', function() { // 点击反对按钮时,反对票数加1 downvotes++; // 更新显示的票数 downvotesDisplay.textContent = downvotes; }); </script> </body> </html> ``` 在上述代码,我们通过`upvotes`和`downvotes`两个变量来分别记录赞成和反对的票数。当点击对应的按钮时,相应的变量会加1,并且通过修改对应的元素的`textContent`属性来更新显示的票数。你可以根据自己的需求进一步扩展和美化这个功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值