JavaScript函数执行得太快了

时间:2013-02-21 12:29:49

标签: jquery callback

在下面的示例中,立即调用myFonk;它不会等待click事件。为什么不呢?

    function myFonk(info) {
        $("#result").html(info);
    }

    function getText(text) {
        return function () {
            myFonk(text);
        }
    }

    $(document).ready(function () {
        $("#b1").click(getText("getText"));
        $("#b2").click(myFonk("myFonk"));
    });

3 个答案:

答案 0 :(得分:5)

每当我们用()编写函数名时,它立即调用该函数 于是 myFonk("myFonk")方式不正确..

以下列方式写作。

function myFonk(info) {
    $("#result").html(info);
}

function getText(text) {
    return function () {
        myFonk(text);
    }
}

$(document).ready(function () {
    $("#b1").click(getText("getText"));
    $("#b2").click(function () {
        myFonk("myFonk")
    });
});

答案 1 :(得分:1)

这是因为你没有传递对函数的引用。您正在调用函数并将结果用作click的事件处理程序。

这将为你解决这个问题......

function myFonk(info) {
    $("#result").html(info);
}

function getText(text){
    return function() {
        myFonk(text);
    }
}

$(document).ready(function() {
    $("#b1").click(function() {
        getText("getText")
    });
    $("#b2").click(function() {
        myFonk("myFonk")
    });
});

答案 2 :(得分:1)

$(document).ready(function () {
    $("#b1").click(getText("getText"));
});

您在这里做的是调用函数getText("getText")并将该调用的结果传递给$("#b1").click()。您不想传递函数的结果。你想要做的是传递函数本身。所以重写为,

$(document).ready(function () {
    $("#b1").click(function() {
        return getText("getText");
    });
});

如果您感兴趣的功能没有参数(比方说,您想要调用函数hello(),没有参数,您可以采用相同的方式:

$(document).ready(function () {
    $("#b1").click(function() {
        return hello();
    });
});

......或者你可以简化它:

$(document).ready(function () {
    $("#b1").click(hello);
});

注意:您正在传递hello(函数本身),而不是hello()(它将立即执行该函数并将结果返回给click()函数。