【问题标题】:asp.net 2.0 site and location of <script/> tags causing problems/conflictingasp.net 2.0 站点和 <script/> 标记的位置导致问题/冲突
【发布时间】:2011-11-04 06:40:55
【问题描述】:

我不知道如何准确/明智地描述这一点,因为这似乎完全不可能,但肯定有一些原因。

我正在尝试利用 jquery、jquery-ui、qtip(jquery 的工具提示)和 highcharts(javascript 图表),但出于发布的目的,我可以很容易地只使用 jQuery 和 jQuery-UI。

如果我在 &lt;head/&gt; 元素的底部包含我的 &lt;script/&gt; 标记,我在尝试调用 .slider() 扩展名来配置我的滑块时遇到错误。但是,如果我在 &lt;body/&gt; 元素关闭之前放置了 &lt;script/&gt; 标签,那么一切正常。为了说明,以下将不起作用(显然下面有一些伪代码):

  <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 脚本标签移动到 &lt;/body&gt; 结束元素的正上方,则一切正常。当脚本标签在头元素中并且我调试我的应用程序时,基本上页面 does 似乎已完全加载,并且 Visual Studio 突出显示调用 .slider() 函数的行,说它不知道滑块()是什么。查看调用堆栈,它似乎正确地从文档就绪函数调用它......标记似乎也在那里,让我相信文档真的准备好了。

现在我没有在我的伪代码中包含 asp.net 1.1/2.0 站点所需的东西,即带有 runat="server' 的 &lt;form/&gt; 元素和使用 &lt;asp:ScriptManager/&gt; 标记(我们需要用于利用 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


【解决方案1】:

看起来 jQuery 1.3.2 正在由 ASP.NET 加载(请参阅您的第二个 WebResource.axd)。两个库版本相互覆盖。因此,当您在页面末尾加载 1.6.2 时它起作用的原因。

【讨论】:

  • 哇,一些低级组件正在注入 1.3.2 jQuery。感谢您发现这一点。因此,删除它并将脚本包含在最重要的固定问题上。下一个问题。现在我已经弄清楚了,出于性能原因,我已经看到了几个 cmets/patterns 将所有脚本包含在 body 元素的底部。这是推荐的做法吗?另外,这样做,任何 $(document) 准备好的块我必须在包含之后出现,对吗?
  • 我总是倾向于将它们放在头部,但如果您希望内容尽快加载,我可以看到将它们放在底部是一种好处。对于您拥有的表单,我看不到在内容之后加载的好处,因为表单非常依赖于滑块、交互、图形等的 jquery 库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多