有趣的问题来自我最近看过的一些继承的代码。我正在尝试将压缩模块添加到项目中。它正在加载所有JS和CSS文件,将它们组合在一起,缩小它们并压缩它们。我尝试了很多解决方案,但所有这些解决方案都有一个致命的问题。
我有一些javascript正在通过MasterPage的PreRender中的Page.ClientScript.RegisterClientScriptBlock加载。压缩模块在MasterPage中作为脚本标记链接加载,但是当我运行页面时...来自PreRender的代码被顶上并且给我一个'$ is undefined'错误,告诉我jQuery不是装了。
此外,当谈到内容页面上的内联javascript时,我似乎无法解决同样的问题。
有关导致此问题的任何想法?启发我,因为我不知道。
答案 0 :(得分:9)
如果之前使用RegisterStartupScript
(而不是RegisterClientScriptBlock
)完成此操作,并从该脚本的WITHIN中调用$(document).ready(function()
。
答案 1 :(得分:0)
如果最终扩展到jquery的脚本标记链接不在头部,而是在页面正文中,那么当脚本块执行时,$
将是未定义的,除非它包含在html中在渲染的html中打开<form />
标记之前,我理解的是RegisterClientScriptBlock
吐出其脚本的位置(就在开始标记之后)。
如果不是这种情况,并且加入/缩小的脚本在头部,那么我将使用浏览器调试器(如Firebug或IE Dev Tools)来验证jquery脚本是否正确地包含在组合脚本中
答案 2 :(得分:0)
所有jQuery代码都应该写在DOM-ready函数中:
$(function() {
// your code here
});
独立于您将其放置在页面中的位置,因为之前jQuery()函数不可用。
答案 3 :(得分:0)
我知道这个答案迟到了,但请尝试在ClientScript.RegisterClientScriptBlock
(而不是OnPreRenderComplete
)处理程序中调用OnPreRender
。这将在页面呈现过程中稍后插入代码。