重复绑定解除元素上的click事件

时间:2012-02-16 07:21:00

标签: javascript jquery performance

我有点困惑,我想知道相同元素上的绑定和解除绑定事件更好,或者我应该使用标志(类似'inProgress')。

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

我有一个锚标记,我将事件绑定到该锚标记,该事件处理一些ajax功能,如获取数据和更新页面的某些部分,我想要的是停止重复点击锚标记来自发生这样一旦第一次点击发生在锚标签上等到响应来自服务器并且页面的一部分被更新,我的困惑在于我是否应该在点击发生后取消绑定事件并再次绑定相同的处理程序处理响应或者我应该设置一个标志来检查是否有任何处理程序正在进行中并在处理响应后将标志设置为false?哪种方式有效的表现呢?

非常感谢任何帮助/建议!

由于

1 个答案:

答案 0 :(得分:0)

使用旗帜!

最好使用一些布尔变量并检查是否允许该操作而不是调用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,请使用变量。