在jQuery中调用函数

时间:2011-01-22 18:33:40

标签: javascript jquery

我在.click

中创建了一个函数
$('#BeforeFunction').click(function(){

//something is entered here then the function below is called
Hello();

});

$('#HitMe').click(function(){
//something here.....
function Hello(){
alert ('Hit button is pressed');
}

});

但调用时函数会导致错误,未定义消息Hello。

到底出了什么问题?

4 个答案:

答案 0 :(得分:3)

ECMA- / Javascript具有功能范围(也称为词法范围)。这意味着,您在函数中定义的所有内容仅在此函数的范围/上下文中可见。因此,Hello仅在HitMe的事件处理函数的上下文中已知。

创建这样一个函数的最好方法可能不是破坏全局命名空间(将它放入window对象),而是定义自己的命名空间/范围。

(function($) {
    function hello() {
        alert ('Hit button is pressed');
    }

    $('#BeforeFunction').click(function(){
         //something is entered here then the function below is called
         Hello();
    });

    $('#HitMe').click(function(){
         Hello();
    });


}(jQuery));

答案 1 :(得分:0)

您必须在function Hello()范围之外定义click

答案 2 :(得分:0)

花括号定义范围并将Hello函数的定义限制为“HitMe”函数的范围。在“Hitme”函数之外定义Hello函数,最好在调用它之前。而你应该没事。

答案 3 :(得分:0)

每个点击事件处理程序都有自己的范围。你在其中创造的任何东西都无法从其他任何地方看到。您收到该错误的原因是第一个单击处理程序不知道Hello是什么。为了解决这个问题,请在点击处理程序之前定义Hello函数

function Hello() {
    alert ('Hit button is pressed');
}

$('#BeforeFunction').click(function(){
    //something is entered here then the function below is called
    Hello();
});

$('#HitMe').click(function(){
    //something here.....
});

如果你想更好地理解JavaScript范围的概念,那么对Digital Web

有一个非常好的解释