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 :(得分:7)
slideback
的范围在DOM就绪处理程序范围内。通过将字符串传递给setTimeout
,您将调用它的全局eval。而是将该函数作为参考传递:
$('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)');
}
});
答案 1 :(得分:3)
当您使用'slideback()'
作为setTimeout()
的字符串文字时,它会在 $(document).ready()
函数之后运行该代码,此时您的函数定义为no从外面可以更长时间访问。
使用这样的匿名函数可以避免许多范围问题:
setTimeout(function() {
$('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)');
}, 1000);
或者,通过传递函数 reference 而不是名称:
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 :(得分:2)
由于将字符串传递给超时时遇到的范围问题,匿名函数效果更好:
$('document').ready(function(){
setTimeout(function() {
$('body').css('background-image','url(http://sehirmedya.com/wp-content/uploads/2012/12/uluda%C4%9F.jpg)');
},1000);
});
答案 3 :(得分: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>