【发布时间】:2011-11-04 06:40:55
【问题描述】:
我不知道如何准确/明智地描述这一点,因为这似乎完全不可能,但肯定有一些原因。
我正在尝试利用 jquery、jquery-ui、qtip(jquery 的工具提示)和 highcharts(javascript 图表),但出于发布的目的,我可以很容易地只使用 jQuery 和 jQuery-UI。
如果我在 <head/> 元素的底部包含我的 <script/> 标记,我在尝试调用 .slider() 扩展名来配置我的滑块时遇到错误。但是,如果我在 <body/> 元素关闭之前放置了 <script/> 标签,那么一切正常。为了说明,以下将不起作用(显然下面有一些伪代码):
<head>
<script jquery.js/>
<script jquery-ui.js/>
</head>
<body>
... html ...
<script type="text/javascript">
$(document).ready(function () {
$(".slider").slider( { .. options .. } );
} )
</script>
... more html *including* the .slider elements
</body>
但是,如果我将两个 jQuery 脚本标签移动到 </body> 结束元素的正上方,则一切正常。当脚本标签在头元素中并且我调试我的应用程序时,基本上页面 does 似乎已完全加载,并且 Visual Studio 突出显示调用 .slider() 函数的行,说它不知道滑块()是什么。查看调用堆栈,它似乎正确地从文档就绪函数调用它......标记似乎也在那里,让我相信文档真的准备好了。
现在我没有在我的伪代码中包含 asp.net 1.1/2.0 站点所需的东西,即带有 runat="server' 的 <form/> 元素和使用 <asp:ScriptManager/> 标记(我们需要用于利用 Microsoft Ajax 解析来自不同文化的货币值)。我不敢相信它们会导致问题,但也许它们是。此外,asp.net 注入了几个自己的脚本部分(即用于验证、回发、等等)
关于表单标签...所有 html 和 document.ready 标记将在表单标签 inside 中,而脚本标签在表单标签之外 always (在它的上方,在头部或在它的下方,在身体的底部)。
显然我可以将脚本标签留在底部,我很可能最终会这样做,但我正在尝试获得一个干净的“模板网站”,以便在创建新客户网站时使用它只是感觉不对我有一个限制,迫使我将这些标签放在 html 的底部。我确信我们的框架代码(或者可能是 asp.net 的)只是插入了一些导致 jQuery 出现问题/冲突的东西,但我真的不知道如何调试/诊断这个问题是什么。因此,如果有人有任何建议,我将不胜感激。
【问题讨论】:
-
将
defer属性添加到head标记中的脚本块有什么不同吗? -
嗯,是的。我更喜欢将标签放在正文末尾,但仍然感觉像一个不需要的黑客。你知道这可能表明什么(它解决了问题的事实)吗?
-
您正在使用任何特定版本的 jQuery?而其他浏览器会不会出现这个问题?
-
使用的是 jQuery 1.4.4。没想到要检查。所以我升级到了 1.6.1(我们最近的另一个项目已经更新了),现在它又回到了不工作,即使那里有延迟属性。是的,它发生在其他浏览器中。请注意,我什至不确定 jQuery 的当前发布版本是什么。
-
如果您可以提供指向您页面的链接,这将更容易调试。
标签: javascript jquery asp.net jquery-ui script-tag