2012-09-18 90 views
0

我有這樣一段代碼:如何確保點擊處理程序只註冊一次?

function expandCollapse(hypId, ElemId, ShowText, HideText) { 
    var handler = function() { 
     $("#" + ElemId).toggle(); 
     toggle(hypId, ElemId, ShowText, HideText); 
    } 

    $('#' + hypId).live('click', handler); 

} 

我想,以確保無論這些代碼被稱爲> 1點時,它不應該做任何事情,只要同一hypId被註冊點擊事件。我怎麼做?

回答

4

有兩件事情:

1:你不應該使用live(),這是deprecated

2:最簡單的方法來處理這種情況(如果元素是當你做展開/摺疊)是使用命名空間。所以像這樣:

function expandCollapse(hypId, ElemId, ShowText, HideText) { 
    var handler = function() { 
     $("#" + ElemId).toggle(); 
     toggle(hypId, ElemId, ShowText, HideText); 
    } 

    $('#' + hypId).off('click.mynamespace').on('click.mynamespace', handler); 
} 

替換mynamespace使用自己選擇的東西是相關問題的處理程序。這樣,它將刪除它可能已附加的任何現有處理程序,然後重新添加處理程序,並添加可能存在的新選項without impacting any other handlers

+0

太棒了!這似乎工作:D – Jack

0
$('#' + hypId).one('click', handler);