關于彈窗中的事件多次執行
彈窗中包含按鈕的,按鈕一般都需要綁定事件。
這個時候就會有一個常犯的錯誤,那就是按鈕的事件會被多次綁定,導致按鈕的事件執行次數,隨著彈窗彈出的次數累加。
分析一下如下代碼:
function showWin(win){
win.show();
win.find('a.btn').click(function(e){
alert('clicked');
})
};
a.btn 每次都會被綁定一個匿名函數。這導致下一次彈出的時候,a.btn 仍然會被綁定新的匿名函數,雖然看起來他們的功能是一樣的。
這樣彈出N多次之后,就形成了如下形式
a.click([fn1,fn2,fn3,fn4....fnN]);
正確的寫法如下:
function showWin(win){
win.show();
win.find('a.btn').unbind('click').click(function(e){
alert('clicked');
})
};
如果是live的話,請用die 解除綁定:
function showWin(win){
win.show();
win.find('a.btn').die('click').live(function(e){
alert('clicked');
})
};
浙公網安備 33010602011771號