2011-08-01 40 views
1

我有一個功能,我稱之爲附加任務/步驟的幻燈片。間歇地,該函數中的滑動代碼被調用兩次。有人能發現我做錯了什麼嗎?爲什麼slideup被稱爲兩次(間歇性問題)?

全局變量

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

間歇性的功能,效果基本show被調用兩次。
結果

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

回答

1

浮現在我的腦海裏的唯一原因是,你得到更多然後一個元素ctrl_toolTip

只要確保$('#controlSlideShow .tooltip');只返回單個元素。

+0

感謝您回覆Talha。我也曾想過這也許是原因。但是我相信只有一個.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'); 
     };