簡體   English   中英

元素上的click事件重復綁定解除綁定

[英]Repeated binding unbinding of click event on element

我有點困惑,我想知道同一元素上的綁定和取消綁定事件更好,或者我應該使用一個標志(例如“ inProgress”之類的東西)。

我有一種情況,例如,如果一項操作已在進行中,則必須阻止一項操作或事件的發生。

我有一個錨標記,並且已經將事件綁定到該錨標記,並且該事件處理了一些ajax功能,例如獲取數據和更新頁面的某些部分,我想要的是阻止重復單擊錨標記,以免發生這種情況一旦錨標記上的第一次單擊發生,直到響應來自服務器並且頁面的一部分被更新,我的困惑就在於是否應在單擊發生后取消綁定該事件,並在響應發生后再次綁定同一處理程序處理還是應該設置一個標志來檢查是否有任何處理程序正在進行中,並在響應被處理后將標志設置為false? 哪種方法才是有效的性能明智的選擇?

任何幫助/建議都非常感謝!

謝謝

使用標志!

最好使用一些布爾變量並檢查是否允許執行該操作,而不是調用bind和unbind(這是額外的開銷)。

如果使用jQuery,則可以使用data()在該錨點上存儲數據。

喜歡:

$('.testLink').on('click',function(){

    //reference link
    var link = $(this);

    //check data
    data = link.data('amIallowed');

    //if no data existed yet
    if(!data){

        //set data and make it false to prevent further requests
        link.data('amIallowed',{
            allowRequest : false
        });

        //lets do ajax
        doAjax();    
    }
    else{ //if there was data

        //and we were allowed
        if(data.allowRequest){
            doAjax(link);    
        }   
    }
});

//do ajax stuff here
function doAjax(link){
    $.post('url',{param:val},function(){

        //revert to true after request
        link.data('amIallowed',{
            allowRequest : true
        });

    });
}

如果您不使用jQuery,仍然可以使用簡單的JS來完成相同的功能。 jQuery使用“ expando-properties ”將數據綁定到元素上。 如果可以使用expando-props,請改用變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM