【问题标题】:Function inside of (document).ready(document).ready 中的函数
【发布时间】:2014-01-13 16:19:34
【问题描述】:

我正在使用一个使用母版页的 VB.NET 站点。我在母版页中调用了我的 custom.js 文件。我插入了一些简单的代码来测试 custom.js:

$(document).ready(function(){
    function sayHello(){
        alert("Hello!");
    }
});

编辑:这是在我的 HTML 中进行调用的方式:

<a href="javascript:sayHello();">Something</a>

当我在我的 .aspx 页面中调用此函数时,没有任何反应。但是,将 .aspx 中的代码单独保留并将函数移到 document.ready 之外可以使代码运行。知道为什么会这样吗?

编辑:我添加了a related question here

【问题讨论】:

    标签: javascript jquery asp.net vb.net


    【解决方案1】:

    那是因为你可能试图从一个全局范围内调用函数sayHello,它在 document.ready 回调的闭包中定义。所以它只能在里面访问。当您移出它时,您是在全局范围内定义它,当您尝试在全局范围或任何其他内部范围内访问它时,它是可访问的。

    当我在我的 .aspx 页面中调用此函数时,没有任何反应。

    您一定遇到了错误。

    您可以在 document.ready 之外安全地定义您的函数。您只需要(大多数情况下)将访问 dom 的一段代码放置在 ready 处理程序中(除非该脚本位于 html 中的元素之后)。

    【讨论】:

    • 我使用 domready 事件,尤其是在从单独的文件或 CDN/网络 URL 加载 javascript 时。使用它来初始化有助于定义页面状态的对象,分析/使用 DOM 树中的元素,并捕获可能导致页面根本无法为用户工作的任何错误。
    • 您所说的全局范围等是有道理的,但这是来自文档本身的超链接内部的调用。也许我不明白,但在我看来,在文档完全加载后该功能应该可用。我错过了什么吗?
    • @MichaelMahony 您在问题中缺少该信息。你是如何绑定你的手柄 r 的。如果您将其作为内联 html 属性处理程序执行,那么它会在全局范围内查找该函数。这是你应该开始通过javascript绑定事件的地方,所以这个问题不会发生。此外,这与时间无关,而与范围有关。
    • 我编辑了我的问题以包括我如何调用该函数。
    • @MichaelMahony 是的,正如所说的那样。这将在全局范围内寻找 sayhello。如果您在 document.ready 中使用 javascript(而不是当前正在执行的内联处理程序)绑定事件,则无需将其置于全局范围内。
    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 2012-02-17
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多