Javascript 元素上单击事件的重复绑定解除绑定

Javascript 元素上单击事件的重复绑定解除绑定,javascript,jquery,performance,Javascript,Jquery,Performance,我有点困惑,我想知道在同一个元素上绑定和解除绑定事件更好,或者我应该使用一个标志(比如“inProgress”) 我有一个场景,如果一个操作已经在进行中,我必须防止操作或事件发生,例如 我有一个锚定标记,我已经将一个事件绑定到该锚定标记,该事件处理一些ajax功能,如获取数据和更新页面的某些部分,我想要的是停止对锚定标记的重复单击,以便在锚定标记上发生第一次单击后,等待服务器的响应并更新页面的部分,我的困惑在于,是否应该在单击发生后解除事件绑定,并在处理响应后再次绑定同一个处理程序,还是应该设置

我有点困惑,我想知道在同一个元素上绑定和解除绑定事件更好,或者我应该使用一个标志(比如“inProgress”)

我有一个场景,如果一个操作已经在进行中,我必须防止操作或事件发生,例如

我有一个锚定标记,我已经将一个事件绑定到该锚定标记,该事件处理一些ajax功能,如获取数据和更新页面的某些部分,我想要的是停止对锚定标记的重复单击,以便在锚定标记上发生第一次单击后,等待服务器的响应并更新页面的部分,我的困惑在于,是否应该在单击发生后解除事件绑定,并在处理响应后再次绑定同一个处理程序,还是应该设置一个标志来检查是否有任何处理程序正在进行,并在处理响应后将标志设置为false?以下哪种方式在性能方面更有效

非常感谢您的任何帮助/建议

谢谢

使用旗帜

最好使用一些布尔变量并检查是否允许该操作,而不是调用bind和unbind(这是额外的开销)

如果使用jQuery,则可以使用在该锚上存储数据

比如:

如果您不使用jQuery,您仍然可以使用简单的JS完成同样的任务。jQuery使用“”将数据绑定到元素上。如果可以使用expando道具,请改用变量

$('.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
        });

    });
}