2011-08-01 7 views
1

필자는 추가 작업/단계로 슬라이드 업을 호출하는 기능이 있습니다. 간헐적으로 함수 내의 슬라이드 업 코드가 두 번 호출됩니다. 누군가 내가 잘못한 것을 발견 할 수 있습니까?슬라이드 쇼가 두 번 호출되는 이유는 무엇입니까 (간헐적 인 문제)?

글로벌 변수는

var currIndex = 0; 

문제가 간헐적으로

function PreNext(direction) { 
     alert('Test #1'); 
     var thisMaxlen = homes.length - 1; // homes is an array. 
     var ctrl_toolTip = $('#controlSlideShow .tooltip'); 

     $(ctrl_toolTip).slideUp('slow' function() { 
      alert('Test #2'); 

      if (direction == 'Next') { 
       (currIndex >= thisMaxlen ? currIndex = 0 : currIndex++); 
      } 
      else { 
       (currIndex <= 0 ? currIndex = thisMaxlen : currIndex--); 
      } 
     }); 
     alert('Test #3'); 
    }; 

와 기능의 slideup는 두 번 호출됩니다.
결과는

Test #1 
    Test #2 
    Test #2 
    Test #3 

답변

1

내 마음에 와서 유일한 이유는 바로 확인이 $('#controlSlideShow .tooltip'); 만 반환 단일 요소를 만들 ctrl_toolTip

에 두 개 이상의 요소를지고 있다는 점이다.

+0

응답 해 주셔서 감사합니다. 나도 그 이유를 생각했을지도 모른다. 그러나 단 하나의 .tooltip 요소가 있다고 확신합니다. 확실히하려면 $ (ctrl_toolTip) .length를 사용하고 1을 반환했습니다. – Tommy

+0

흠, 이상하게 생각합니다. 더 명확하게 만들 수있는 피들 (jsfiddle.net)을 만들 수 있습니까? 그럼 내가 너를 도울 수있을 것 같아. –

1

확인. 더블 패스가 발생하는 이유를 알 수 없었습니다. 그러나 나는 이중 패스를 수용 할 수있는 해결 방법을 제시 할 수있었습니다.

function PreNext(direction) { 
     alert('Test #1'); 
     var dblPassFix = 0;     // To fix the double pass in the slideup 
     var thisMaxlen = homes.length - 1; // homes is an array. 
     var ctrl_toolTip = $('#controlSlideShow .tooltip'); 

     $(ctrl_toolTip).slideUp('slow' function() { 
      alert('Test #2'); 
      dblPassFix++; 

      if (direction == 'Next') { 
       (currIndex >= thisMaxlen ? currIndex = 0 : currIndex++); 

       if (dblPassFix > 1) { 
        currIndex--; 
       } 
       ... 
      } 
      else { 
       (currIndex <= 0 ? currIndex = thisMaxlen : currIndex--); 

       if (dblPassFix > 1) { 
        currIndex++; 
       } 
       ... 
      } 
     }); 
     alert('Test #3'); 
     }; 
관련 문제