2014-02-21 5 views
-1

Я создаю слайд-шоу, когда я достигаю конца lis и нажимаю стрелку вправо, ajax должен запускать и загружать новый список изображений. Когда я дойду до конца второго списка, ajax должен запустить агаин. Если я дважды щелкнул дважды, ajax срабатывает дважды и изменяет глобальные значения, которые мне нужны, а не только один раз. Я могу поместить hide after else, чтобы скрыть кнопку, чтобы она не могла быть нажата дважды, пока аякс-успех снова не покажет кнопку. Кнопка - это просто div. Я не хочу скрывать это, потому что в течение секунды он скрыт, и я хочу, чтобы он был видимым. Если я попытаюсь отменить rightNav после еще, я не могу привязать его снова к успеху ajax. В чем может быть проблема?jquery unbind and bind на ajax success

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); 

б) Игнорировать щелчок при Аякса уже загрузки:

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

     if (rightNav.loading) { 
      return; 
     } 

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

Спасибо, я пробовал ваше первое решение, и оно работает. – user2406735