jQuery就绪函数

时间:2010-06-18 08:56:25

标签: javascript jquery

任何人都可以告诉我为什么文件就绪功能需要首先调用功能吗?我被告知下面第一个例子中的setTimeout(它不起作用)将被评估并传递给ready,但是我没有看到第二个例子中函数调用的区别是什么(有效) ?

$(document).ready(
    setTimeout(
        function(){
            $('#set_3').innerfade({
                animationtype: 'fade',
                speed: 'slow',
                timeout: 3000,
                type: 'sequence',
                containerheight: '180' });
        },
        2000);
);


$(document).ready( 
    function(){  
        setTimeout(
            function(){ 
                $('#set_3').innerfade({  
                    animationtype: 'fade',
                    speed: 'slow', 
                    timeout: 3000, 
                    type: 'sequence', 
                    containerheight: '180' }); 
            }, 
            2000);
    }
);
​

7 个答案:

答案 0 :(得分:6)

后者定义了一个在文档准备好时调用的函数,并将其作为参数传递给$(document).ready()。在前者中,传递给$(document).ready()的参数是评估setTimeout命令的结果,所以是的,在第一种情况下,setTimeout调用是立即的。

答案 1 :(得分:4)

您需要将回调传递给ready()setTimeout不会返回回调,它会立即执行 ,并将其结果作为参数传递给ready函数。那不是你想要的。

只需将其包裹在function() { }中即可。

答案 2 :(得分:3)

让我们考虑一个更简单的例子。

function f (g) {
   g();
}

此函数f接受函数参数g并调用它。因此,我们希望g成为一个函数。

现在

f (alert("Wrong"));

相当于

var param = alert("Wrong");
f(param);

您会看到,在第一行会显示警告框(评估语句)并将undefined返回param。但是f需要一个函数,而不是undefined

需要一个功能。一种方法是创建一个:

function param () { alert("Right"); }
f(param);

但Javascript也支持匿名函数,格式为

var param = function () { alert("Right"); }
f(param);

现在消除您将获得的param变量

f(function () { alert("Right"); });

对应于您的问题,f$(document).readyalertsetTimeout函数。

答案 3 :(得分:2)

jQuery期待它可以调用的匿名函数。

http://api.jquery.com/ready/

答案 4 :(得分:2)

您需要将委托传递给ready函数:

$(document).ready(function() {
    // Do something
});

或者简单地说:

$(function() {
    // Do something
});

答案 5 :(得分:0)

您提供的功能是在DOM准备就绪时执行的回调(整个页面可能尚未加载)。

答案 6 :(得分:0)

不,它不起作用,至少不一样。虽然在第一个示例中启动了计时器,但在ready事件发生时它不会启动。

在第一个示例中,使用ready方法的结果调用setTimeout方法。由于setTimeout返回超时的句柄而不是ready方法可以使用的委托,因此它与:

相同
setTimeout(
    function(){
        $('#set_3').innerfade({
            animationtype: 'fade',
            speed: 'slow',
            timeout: 3000,
            type: 'sequence',
            containerheight: '180' });
    },
    2000);

$(document).ready();

因此,立即调用setTimeout方法,对ready的调用完全没有效果。