$(document).ready不起作用

32

我正在尝试在ASP.NET中运行jQuery和WebMethods; 我已经在母版页上添加了ScriptManager,并在内容页上添加了一个内容

<asp:Content ID="ch" ContentPlaceHolderID="cHead" runat="server">
    <script language="javascript" type="text/javascript">
       $(document).ready(function () {
          alert("hi");
       });
    </script>
</asp:Content>

然而这个事件从未触发,我缺少了什么?


1
JavaScript在jQuery 1.6中可以正常工作,如此示例所示:http://jsfiddle.net/VRA98/。其他地方可能出了问题。你的浏览器是否显示JavaScript的错误图标?当你查看页面源代码时,是否有JavaScript代码存在?(也许服务器端的代码隐藏了包含JavaScript的控件)。 - John K
1
发布你的jQuery包含代码。 - kobe
10个回答

36

请验证以下步骤:

  1. 您是否包含jquery
  2. 在firebug中检查错误

这些操作应该可以解决问题。


4
如果这个方法没有帮助并且没有出现错误,请尝试在各个步骤中加入一些console.log('step info'),观察它们是否都在正确的时间输出到控制台……因为:在某些错误情况下,jQuery可能会静默退出 - jave.web

35

ready 停止工作时,可能的原因是你的某个 JavaScript 代码在 $(document).ready(...) 或者 $(...) 调用中抛出了异常,从而导致后续的 ready 块无法执行。请确定发生错误的单个页面,并检查是否存在其他地方的可能错误。


2
我曾经遇到过类似的问题 - 我的页面确实存在一些与jQuery相关的错误。一旦这些错误被修复,一切就正常了。 - Luoruize
对我来说,这是因为我忘记执行 bower install 命令来安装一些第三方 JS 库。当我尝试加载其中一个文件时,Laravel 显示了一个 404 页面,显然由于包含非 JS 代码而引发了错误。 - Scott Weldon
我希望早点看到你的答案!谢谢。 - taco
谢谢,这也是我的问题原因。我没有想到其他块中的错误会阻止所有document.ready。 - Worthy7
这正是我的问题。一个JS函数悄无声息地抛出了异常,导致所有剩余的javascript都被终止了。修复那个未捕获的异常就解决了问题。我点赞!;-) - KWallace
完全成功了...之前脚本中出现了一个错误。 - openwonk

16

改用这个:

$(document).ready(function() { /* your code */ });

使用这个:

jQuery(function($) { /* your code */ })(jQuery);

这个方法更简洁,且具有相同的功能,同时不依赖于$变量为jQuery对象。


2
请检查您的注释,否则代码将无法运行。注释应为/* your code */,您的示例将是正确的。 - sg3s
7
@harshal lonare,是的,它可以使用那段代码,但为什么不能使用$(document)? - wolfgang
你说的 (jQuery) 是什么意思?它干扰了我的脚本。 - Peternak Kode Channel
你的意思是什么(jQuery),它干扰了我的脚本。 - Peternak Kode Channel

3
检查你的脚本是否在jQuery链接之后编写或加载。

<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>

//after link >> write codes...

<script>
    $(document).ready(function(){
      //your code
    })(jQuery);
</script>


1
如果主机页面是HTTPS,而包含的JavaScript源路径是HTTP,则会出现这种情况。两个协议必须相同,即HTTPS。提示标志是检查Firebug并注意JS被“拒绝访问”。

1

我从另一个 .php 项目中复制了我的内联js,在这段代码块中有一些 php 代码输出某个值,由于该变量在新文件中未定义,因此会产生典型的 php 未定义警告/错误,导致js代码被混乱,无法响应任何事件,即使是alert("xyz");也会悄无声息地失败!尽管错误行位于文件末尾附近,但js仍然会死亡。

而且没有任何错误提示!!!>:(

现在令人困惑的是,调试器控制台/输出没有给出任何提示/错误/警告,js默默地死去。

因此,请检查您是否将php内联编码与js结合使用,并查看它是否输出任何错误。一旦移除/排序,您的js就应该正常工作。


1
function pageLoad() {
    console.log('pageLoad');
    $(document).ready(function () {
        alert("hi");
    });
};

问题出在ScriptManager的ajax上,使用pageLoad()代替即可。


0

我之前遇到过类似的问题,但是我是用这种方式解决的:

// wait until DOM is loaded
$(document).ready(function(){

    console.log("DOM is ready");

    // wait until window is loaded (images, links etc...)
    window.onload = function() {

        console.log("window is loaded");
        var your_html_element = document.getElementById("your_html_element_ID"),

    };
});

0

有一种可能,看看:

<script language="javascript" type="text/javascript" src="./jquery-3.1.1.slim.min.js" />

对比

<script language="javascript" type="text/javascript" src="./jquery-3.1.1.slim.min.js"></script>

第一种方法实际上是错误的,但浏览器根本不会抱怨。 你需要确保你确实以正确的方式关闭了javascript标签。

0

我尝试了这里的所有解决方案并在网上搜索了一个多小时。

我的问题最终是需要清除缓存。我注意到本地intranet.js中的内容与我输入的内容不符。我通过(在Chrome中)使用F12打开开发工具,单击“源”菜单选项,然后深入到我的脚本文件夹和.js实际文件名来检查这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接