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

slidebackDOMレディハンドラスコープ内でスコープされます。文字列をに渡す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 に答える