2013-01-21 118 views
0

JavaScript部分:爲什麼不改變背景圖像?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script> 
     $('document').ready(function(){ 
      setTimeout('slideback()', 1000); 
      function slideback() 
      { 
       $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)'); 
      } 
     }); 
</script> 

CSS代碼:

body{ 
       background-image:url('taksi.jpg'); 
       background-size:100%; 
       background-attachment:fixed; 
       -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
       src='taksi.jpg', 
       sizingMethod='scale')"; 
       filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
       src='taksi.jpg', 
       sizingMethod='scale'); 
      } 

毫秒後1000,它應該改變,但沒有。爲什麼不?我該如何解決這個問題?

+0

在JS控制檯中是否有錯誤?您正在加載的圖片是否真的存在? –

回答

7

slideback在DOM就緒處理程序範圍內的作用域。通過將字符串傳遞給setTimeout,您正在調用它的全局評估。相反,傳遞函數爲參考:

$('document').ready(function() { 
     setTimeout(slideback, 1000); 
     function slideback() { 
      $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)'); 
     } 
}); 
3

當您使用'slideback()'作爲一個字串setTimeout()將後運行該代碼$(document).ready()功能,此時你的函數定義不再從外部訪問。

您可以使用匿名函數這樣可以避免許多範圍的問題:

setTimeout(function() { 
    $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)'); 
}, 1000); 

或者,通過傳遞函數參考而不是名稱:

setTimeout(slideback, 1000); 

你也可以移動.ready()功能之外的定義:

function slideback() 
{ 
    $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)'); 
} 

$(function() { 
    setTimeout(slideback, 1000); 
}); 
2

匿名函數工作得更好,由於傳遞字符串時超時你有範圍的問題:

DEMO

$('document').ready(function(){ 
     setTimeout(function() { 
      $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)'); 
     },1000); 
    }); 
1

沒有問題,只是問題在於編寫代碼。

<script type="text/javascript" src="js/jquery.js"></script> 

<script> 
    function slideback() 
    { 
     $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)'); 
    } 
    $('document').ready(function(){ 
     setTimeout(slideback, 1000); 
    }); 
</script> 

<body></body>
+0

已經發布。 – mplungjan

+0

我不知道它,因爲我在同一時間打字......對不起,因爲遲到......但它沒有關係,更多的IMP,他得到了很好的幫助,你們準時... Thanx –

+0

而且不要傳遞一個字符串給setTimout – mplungjan