在寫一個項目劲厌,有一個觸發(fā)編輯按鈕才會出現(xiàn)編輯板塊,然后編輯板塊中有點擊添加的事件补鼻。當保存編輯风范,編輯板塊消失。再次點擊編輯硼婿,再點擊添加加酵,會觸發(fā)多次,生成多個模塊冗澈。
經(jīng)過多次反復痛苦的調(diào)試陋葡,發(fā)現(xiàn)是在點擊編輯后調(diào)用的函數(shù)中綁定了添加的事件,當再次點擊編輯時肛响,會重復綁定惜索,所以會出現(xiàn)觸發(fā)多次的bug巾兆。
解決方法就是在綁定之前先解綁角塑。
$('.u-edit-btn-box').off('click','#btnAdd').on('click','#btnAdd',function() {addInput();});
這樣就可以解決了。jquery中還有很多類似的處理圃伶,比如說運行一個動畫前先將之前的動畫stop()掉堤如。
不過在解綁事件時最好將具體的元素寫入,因為在事件委托時,不寫明具體窒朋,解綁會將所有事件解綁
<body>
<button class="btn1">綁定2和3事件</button>
<button class="btn2">2事件</button>
<button class="btn3">3事件</button>
</body>
<script type="text/javascript" src="js/jquery-3.1.0.min.js"></script>
<script type="text/javascript">
$('body').on('click','.btn1',function() {
$('body').off().on('click','.btn2',function() {
alert(2);
});
$('body').off().on('click','.btn3',function() {
alert(3);
});
})
</script>
上述例子只會觸發(fā)alert(3)煤惩,因為點擊btn1時,解綁了所有在body上的click事件炼邀,只會調(diào)用在最后綁定的alert(3)魄揉。
應該寫成
$('body').on('click','.btn1',function() {
$('body').off('click','.btn2').on('click','.btn2',function() {
alert(2);
});
$('body').off('click','.btn3').on('click','.btn3',function() {
alert(3);
});
})