2012-02-16 125 views
0

我有点困惑,我想知道绑定和绑定事件对同一元素更好或我应该使用一个标志(像'inProgress')。反复绑定单元上的点击事件解除绑定

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

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

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

谢谢

回答

0

使用标志!

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

如果您使用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,请使用变量。

+0

谢谢!这清除了我的怀疑。 :) – Sushil 2012-02-16 09:50:25