搜索

首页  >  问答  >  正文

javascript - jq click事件重复执行的问题

求助,jq动态生成的元素需要用on来绑定点击事件才生效,而执行on的函数里面也有点击事件,然后函数就被执行了两次,这样的情况该怎么解决?

曾经蜡笔没有小新曾经蜡笔没有小新2703 天前1037

全部回复(9)我来回复

  • 漂亮男人

    漂亮男人2017-07-05 10:40:45

    用event对象找到你真正想点击的目标

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-07-05 10:40:45

    其实,无非就是事件绑定了2次或者事件冒泡引起的;
    1,解除事件,再绑定

    $(ele).unbind('click').click(function() {
            // to do    
    })

    2,取消冒泡

    $(ele).click(function(e){
       e.stopPropagation();
    });

    回复
    0
  • 某草草

    某草草2017-07-05 10:40:45

    先去除监听,后监听
    .off(handler).on(handler)

    回复
    0
  • 天蓬老师

    天蓬老师2017-07-05 10:40:45

    这是冒泡? e.stopPropagation()

    回复
    0
  • typecho

    typecho2017-07-05 10:40:45

    off 先解绑 在绑定

    回复
    0
  • 滿天的星座

    滿天的星座2017-07-05 10:40:45

    雷雷

    回复
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-07-05 10:40:45

    雷雷

    回复
    0
  • 天蓬老师

    天蓬老师2017-07-05 10:40:45

    楼上的说的比较清楚了。
    1.找到问题
    1.1 是绑定了两次,因为动态生成的元素绑定了一个事件,但是在这个事件中又去调用了之前绑定的事件

    $('document').unbind('click').click(function() {
        //取消绑定的回调事件
    })

    1.2 还是 事件的冒泡导致(如果不熟悉冒泡,请先看下相关资料)

    $('document').click(function(e){
       //取消事件冒泡
       e.stopPropagation();
    });

    2.动态生成的元素其实可以不一定需要使用动态的绑定事件

    使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
    点击这里查看详细文档:http://www.w3school.com.cn/jq...

    $("p").delegate("button","click",function(){
      $("p").slideToggle();
    });

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-07-05 10:40:45

    记得on()之后off()掉

    回复
    0
  • 取消回复