我在一个 ASP.NET MVC 4 应用程序上工作。
我更新了项目中的 jQuery、jQuery UI 和所有其他 nuget 包。构建它并运行它以查看没有出现任何问题。一切正常,所以我继续开发了几天。
过了一会儿,我将项目发布到测试服务器上,我必须看看它在 Ipad、Iphone 等上的外观。然后我意识到 jQuery-UI 手风琴停止工作。
它呈现,但不响应点击。这适用于所有浏览器。我发现这很奇怪,因为唯一的区别是我在发布模式下应用的 MVC 捆绑,据我所知,它要么缩小 jQuery 文件,要么选择缩小版本(后者可能会在这里做些什么,因为它是在更新时添加的使用 nuget)。
jQuery版本是:2.0.3
jQuery-ui 版本为:1.10.3
在 Chrome 控制台中,错误显示为:
未捕获的类型错误:无法读取未定义的属性“safari”
好的,所以我意识到这可能是我的一个 jQuery 程序集引用 $.browser 的结果,该引用显然已在 jQuery 1.9 中删除。
然而,它在调试模式下工作(使用非缩小版本)的事实让我认为它可能不是那样的。我几乎可以认为这是缩小版本的问题,但这也不应该是可能的。
任何人都知道为什么会发生这种情况并知道如何解决它?
更新 按要求附上大部分代码。奇怪的是,这在调试模式下有效,但在发布时无效。我不明白为什么会有任何重大变化会导致这个问题:
_Layout.cshtml
Bundleconfig.cs
视图(称为局部视图)
局部视图
jquery代码
Chrome 中的 javascript 错误
chrome中错误的更大视图
只是补充。发布此内容后,我删除了modernizr 的重复加载(在我没有注意到的情况下添加了telerik 自定义)。问题仍然存在。
更新 2 我关闭了 bundleconfig 中的优化。
BundleTable.EnableOptimizations = false;
这让我看到了在 jquery-ui 中引发错误的原因,而且似乎确实是 $.browser 被删除了。似乎它实际上加载了两个旧版本的 jquery(当前 + 1.6.4 和 1.7.1)以及新的一个和两个版本的 jquery-ui(当前 + 1.8.16),最后一个抛出错误。这些文件都没有加载到我的解决方案或文件夹中。
这似乎是一个发布问题,但被捆绑和缩小掩盖了......我会尝试解决这个问题,看看它是否有效。