-2

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

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

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

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

3 回答 3

6

每当我们用 () 写函数名时,它会立即调用该函数,因此 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")
    });
});
于 2013-02-21T12:34:19.290 回答
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")
    });
});
于 2013-02-21T12:32:18.890 回答
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()函数。

于 2013-02-21T12:37:54.260 回答