$(document).ready中没有调用javascript函数

时间:2015-02-21 01:10:07

标签: javascript jquery

如果我的javascript函数在document.ready call中已经被调用,为什么不调用它。

$(document).ready(function () { 
    //doesn't get called
    function Test() {
        //do something
    }
}

///does get called
function Test() {
}

4 个答案:

答案 0 :(得分:1)

  

从我的html元素中的onchange事件调用

我认为这意味着你有像

这样的东西
<input onchange="Test()" />
在您的HTML中

在这种情况下,答案是:因为scope

内联事件处理程序在全局范围内进行评估。在您的第一个示例中,Test未在全局范围内定义,它在您传递给$(document).ready的函数内定义。因此,内联事件处理程序无法找到该函数。

这是一个简化的例子:

function ready() {
    function Test() { }
}

ready();
Test(); // ReferenceError because Test is not defined in this scope

注意没有理由将函数定义放在$(document).ready回调中,除非显式没有将它们放在全局范围内。

答案 1 :(得分:0)

有两个原因:

$(document).ready(function () { 
    //doesn't get called
    function Test() {
        //do something
        console.log('test called');
    }

    Test();
}
                 );

你错过了最后一个外部的paren(上面的最后一行),而你没有调用你定义的函数。

http://jsfiddle.net/fepy8239/

答案 2 :(得分:0)

你在第一个例子中所做的就是定义这个功能。你没有调用它。如果您按如下所示进行更改,则现在定义调用它:

$(document).ready(function () { 
    //does get called
    (function Test() {
        //do something
    })();
});

(我假设最后遗漏的外括号在发布问题时是一个错字,但我会指出它以防万一...)

答案 3 :(得分:0)

你问的问题与此相同:

function start() {

 function test() { 
  thisWontWork(); 

 }

}

start();

如果你打电话/启动一个功能,并不意味着那里的功能也会启动。一个不应该重复的菜鸟错误。记住这一点!