【问题标题】:jquery - function not defined - calling this function from inline scriptjquery - 未定义函数 - 从内联脚本调用此函数
【发布时间】:2014-09-04 01:28:29
【问题描述】:

我有如下所示的代码。已经删除了不需要的代码,只写了需要的。当我从正文中的内联脚本调用我的 toggleFunc 时,它在控制台中显示该函数未定义。谁能告诉我这是怎么回事?

<head>
<script src="~/Client/js/lib/jquery-1.10.2.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        var pageInitialize = function () {  

            ..doing something here

            function toggleFunc() { 
               ..doing something more here
            };
        };
        pageInitialize();
    });
</script>
</head>
<body>
<script>toggleFunc()</script>
</body>

【问题讨论】:

  • 这是因为toggleFunc() 在定义之前就被调用了。

标签: javascript jquery function inline-scripting


【解决方案1】:

在 DOMReady 触发之前不会定义您的两个函数,这将在运行 body 中的 toggleFunc 调用之后发生。此外,toggleFuncpageInitialize 函数内,因此在pageInitialize 之外无法访问。

试试这个:

<script type="text/javascript">
    var pageInitialize = function () {  
        //..doing something here
    };
    pageInitialize();

    function toggleFunc() { 
        //..doing something more here
    };
</script>

【讨论】:

  • 谢谢,我在发布问题后才意识到。愚蠢的问题,我有时会问。还是谢谢。
  • @RoryMcCrossan 有没有办法,如果定义了函数然后调用函数?
  • @C-linkNepal 是的,你可以在调用之前检查函数是否存在:functionName &amp;&amp; functionName();
  • 不,我的意思是当 OP 在脚本中调用 toggleFunc() 时,如果它可以使用然后调用它???
  • @C-linkNepal no.您所能做的就是检查某个功能是否可以在特定时间使用。无法知道您何时可以使用某个功能。
【解决方案2】:

两个问题:

  1. toggleFunc 不是全局函数。它是pageInitialize 的本地地址。如果您希望它是全局的,请将其分配给window

  2. 您在 $(document).ready 回调中定义函数,该回调将在未来某个时间点执行。您正在立即调用该函数,$(document).ready 回调。它还没有被定义。

【讨论】:

    【解决方案3】:

    toggleFunc() 是一个Closure,无法从全局范围内调用。

    在您使用$(document).ready 之前,它甚至在定义之前就被调用了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2016-06-20
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多