搜尋

首頁  >  問答  >  主體

javascript - jq click事件重複執行的問題

求助,jq動態產生的元素需要用on來綁定點擊事件才生效,而執行on的函數裡面也有點擊事件,然後函數就被執行了兩次,這樣的情況該怎麼解決?

曾经蜡笔没有小新曾经蜡笔没有小新2741 天前1068

全部回覆(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
  • 取消回覆