2013-07-19 48 views
-5

我有這個劇本,但在IE8我得到錯誤添加:「照片是undiefienied」,哪裏是如果做來解決這個問題:腳本錯誤,在這裏如果

/* 
* Author:  Marco Kuiper (http://www.marcofolio.net/) 
*/ 
window.addEvent('load', function() { 

    jQuery("#slideimg1").css({ 
      "background-image" : "url("+url+"/" + photos[0].image + ")" 
    }); 
    if(photos.length >= 2){ 
     jQuery("#slideimg2").css({ 
       "background-image" : "url("+url+"/" + photos[1].image + ")" 
     }); 
    } 


    // Backwards navigation 
    jQuery("#cp-back").click(function() { 
     //stopAnimation(); 
     navigate("back"); 
    }); 
    // Forward navigation 
    jQuery("#cp-next").click(function() { 
     //stopAnimation(); 
     navigate("next"); 
    }); 


    //jQuery("#preload").hide(); 
    var activeContainer = 1;  
    var currentImg = 0; 
    var animating = false; 
    var first = false; 
    var navigate = function(direction) { 
     // Check if no animation is running. If it is, prevent the action 
     if(animating) { 
      return; 
     } 
     // Check which current image we need to show 
     if(direction == "next") { 
      currentImg++; 
      if(currentImg == photos.length + 1) { 
       currentImg = 1; 
      } 
     } else { 
      currentImg--; 
      if(currentImg == 0) { 
       currentImg = photos.length; 
      } 
     } 

     // Check which container we need to use 
     var currentContainer = activeContainer; 
     if(activeContainer == 1) { 
      activeContainer = 2; 
     } else { 
      activeContainer = 1; 
     } 

     showImage(photos[currentImg - 1], currentContainer, activeContainer); 

    }; 

    var currentZindex = -1; 
    var showImage = function(photoObject, currentContainer, activeContainer) { 
     //alert(currentContainer); 
     animating = true; 
     // Make sure the new container is always on the background 
     currentZindex--; 
     if(!first){ 
      //alert(first); 
      //alert("aa"); 
      // Set the background image of the new active container 
      jQuery("#slideimg" + activeContainer).css({ 
       "background-image" : "url("+url+"/" + photoObject.image + ")" 
       //"display" : "block", 
       //"z-index" : currentZindex 
      }); 
      // Fade out the current container 
      // and display the header text when animation is complete 
      jQuery("#slideimg" + currentContainer).fadeOut(effectTime,function() { 
       animating = false; 
      }); 
      jQuery("#slideimg" + activeContainer).fadeIn(effectTime); 

      //first = false; 
     }else{ 
      //alert("bbb"); 
      jQuery("#slideimg" + activeContainer).fadeOut(effectTime,function() { 
       animating = false; 
      }); 
      jQuery("#slideimg" + currentContainer).fadeIn(effectTime); 
      first = false; 
      //animating = false; 
     } 
    }; 

    var stopAnimation = function() { 
     // Clear the interval 
     clearInterval(interval); 
    }; 

    // We should statically set the first image 
    navigate("next"); 

    if(photos.length > 1){ 
     // Start playing the animation 
     interval = setInterval(function() { 
      navigate("next"); 
     }, slideshowSpeed); 
    } 

}); 
+0

??? – Cherniv

+1

你還沒有在你的代碼中定義'照片' –

+5

*詢問代碼的問題必須**顯示對所解決問題的最小理解** **包括嘗試的解決方案,爲什麼他們不工作**,以及預期的結果。* [如何使用瀏覽器的控制檯](https://developers.google.com/chrome-developer-tools/docs/console?hl=fr) –

回答

1

我注意到你的「照片」的用法,但我沒有看到聲明的變量的任何地方...... 至少,主要功能(因爲它不會是全球性的)裏面,聲明你的照片變種:

var photos = []; 

像克里斯說的那樣,常常檢查var是否被定義。 :) 來源:https://stackoverflow.com/a/17748905/2599797

if (photos) // Simple 
if (typeof(photos) != 'undefined') // Type matching, if photos defaults to true it won't pass 
if ($.isArray(photos)) // jQuery based Javascript/Prototype native array check 
在其他瀏覽器其確定
+0

如果照片未申報,那麼你的第一個和第三個「if」將失敗。你必須使用if(window.photos)或你的第二個if語句,否則你會得到一個未捕獲的引用錯誤。 [Broken](http://jsfiddle.net/tEg8j/2/) - 由於照片未申報。 [Fixed](http://jsfiddle.net/tEg8j/3/) - 因爲我們爲未聲明的變量添加了適當的檢查。 –

+0

我使用這個,這是行之有效的(如果(typeof(photos)!='undefined')),比如你自己 –

+0

@BrandonBoone,這就是爲什麼我說*額外*,因爲我用'var photos = []聲明瞭它。 '。 :) – ReSpawN