小白,JS出现问题,求帮助

问题是这样的,当我第一次点击btni,并输入账号密码,点击OK,能正常添加;第二次点击点击btni,并输入账号和密码,点击OK,先弹出一次alert,后正常添加;第三次点击btni,并输入账号和密码,点击OK,先弹出两次alert,后正常添加。。。后面弹出alert的数量如前依次加1;请问各位大佬,问题出在哪里。图片说明

函数嵌套绑定了click事件,每点击一次就多绑定一次,因此每点击一次都会多弹出一次alert
解决办法两个:
1、看你的内外层函数完全没必要嵌套在一起,所以你可以把内层函数拿出啦
2、如楼上所说用unbind解绑,但是没必要外层函数也解绑,只需解绑内层函数即可

 $('.btni').eq(0).on(click,function(){
 $('.add').show();
  $('add_ok').unbind('click').on(click,function(){
 ............
 })
 })

即可

每次点击都绑定了一次事件,你可以用remove清除点击事件

on() 方法在被选元素及子元素上添加一个或多个事件处理程序。即每次点击按钮为元素添加一个相应的点击事件。

 //以上代码可以这样写
 $('.btni').eq(0).unbind('click').on(click,function(){
 $('.add').show();
  $('add_ok').unbind('click').on(click,function(){
 ............
 })
 })

unbind即为清除事件

每次点击时先清除前面绑定的事件,可以利用

 $(".btni").eq(0).off().on("click",funtion(){ //off 清除绑定的所有事件。如果只清除click,那就是.off("click")....

 })

将#add_ok 事件放在btni的点击事件外就可以了,因为点击一次btni,都要先执行一次ok,在执行btni的点击事件。

每次多次加1说明你的注册时间也是多次加1,而且即显示正常,也弹出alert也可以佐证这一点,所以我们必须要去清除on绑定的click事件
而且按照你的代码你是每次点击那个ok的时候就会绑定一次事件,所以就第一次的时候只有一个,第二次的时候两个,第三次就三个,你每次又都清val值
所以就每次都是ialert了,如果你不想解除绑定事件就应该把第二个点击事件单独放出,不能放在第一个点击事件里面如:
$(".div1").on("click", function() { console.log("div触发")});
$(".btn1").on("click", function() { console.log("btn1触发"); })