元素上单击事件的重复绑定-取消绑定

Repeated binding unbinding of click event on element

本文关键字:绑定 取消 单击 事件 元素      更新时间:2023-09-26

我有点困惑,我想知道在同一个元素上绑定和取消绑定事件更好,或者我应该使用一个标志(类似于"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,请改用变量。