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 毫秒后,它应该会改变,但不会。为什么不?我该如何解决这个问题?

4

4 回答 4

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)');
      }
 });
于 2013-01-21T10:37:21.400 回答
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);
});
于 2013-01-21T10:36:13.493 回答
2

由于将字符串传递给超时时遇到的范围问题,匿名函数效果更好:

演示

   $('document').ready(function(){
        setTimeout(function() {
            $('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)');
        },1000);
    });
于 2013-01-21T10:37:25.807 回答
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>
于 2013-01-21T10:39:05.093 回答