2014-02-21 130 views
-1

我创建幻灯片,当我到达lis结尾并单击右箭头时,ajax应该触发并加载新图像列表。当我到达第二个列表的结尾时,ajax应该触发agaiin。如果我点击两次快速阿贾克斯火两次,并改变我需要的全球变量,而不是只激活一次。我可以在隐藏其他按钮之后放置隐藏按钮,以便它不能被按下两次,直到ajax成功再次显示按钮。该按钮只是一个div。我不想隐藏它,因为它隐藏了一秒,我希望它可见。如果我尝试在其他人之后解除绑定rightNav,那么我无法在ajax成功上再次绑定它。 可能是什么问题?jquery解绑并绑定到ajax成功

rightNav.click(function(){ 
    if(index <= listLength - 2){ 
     index = index + 1; 
     appendImage(index); 
    } 
    else { 
     rightNav.unbind('click'); 
     nextUrl = '/GetPhotosCriterians?categoryid=' + pCategoryId + '&styleid=' + pStyleId + '&terms=' + pTerms + '&pos=' + nextPos; 
     $.ajax({ 
      type: "GET", 
      url: nextUrl, 
      dataType:"json", 
      success: function(data){ 
       imagesList = data; 
       listLength = imagesList.length; 
       appendImage(0); 
       curentPos = nextPos; 
       nextPos = nextPos + imgNumber; 
       prevPos = curentPos - imgNumber; 
       rightNav.bind('click'); 
      } 
     }); 
    } 
}); 

回答

1

您的代码不起作用,因为rightNav.bind('click');不实际的click事件绑定到你的函数。

bind(在你的情况下)的语法是bind(event, callback)

所以,你既可以:

一)提供一个名称的功能,这样你就可以再次分配给变量,如:

var f = function() { if(index <= listLength - 2){ ... 
rightNav.click(f); 

然后你分配回:

rightNav.bind('click', f); 

b)当ajax已经加载时忽略点击:

else { 
     //rightNav.unbind('click'); 

     if (rightNav.loading) { 
      return; 
     } 

     rightNav.loading = true; 
     ... 
     success: function(data){ 
      rightNav.loading = false; 
     ... 
+0

谢谢,我已经尝试了你的第一个解决方案,它的工作原理。 – user2406735