14

使用ASP.NET MVC 4NuGet来管理包。ASP.NET MVC 4:无法修改jQuery Unobtrusive Ajax

通过NuGet升级到jQuery 1.9.1后,我开始收到有关在jQuery 1.9.x去除live()功能JavaScript错误。

我按F5从VS.NET调试模式下运行,进入登录页面,并得到如下:

Error Microsoft JScript

发现这个StackOverflow的答案:https://stackoverflow.com/a/14512797并提出了4名更改~\Scripts\jquery.unobtrusive-ajax.js

~\Scripts\jquery.unobtrusive-ajax.js

$(document).on("click", "a[data-ajax=true]", function (evt) { 
     ... 
    }); 
    $(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) { 
     ... 
    }); 
    $(document).on("click", "form[data-ajax=true] :submit", function (evt) { 
     ... 
    }); 
    $(document).on("submit", "form[data-ajax=true]", function (evt) { 
     ... 
    }); 

我也物理删除jquery.unobtrusive-ajax.min.js和使用WebGrease 1.3.0从我的更新~\Scripts\jquery.unobtrusive-ajax.js重新生成。

但是,由于某些原因,我对不使用.live()函数的更改并未出现问题。我试图停止IIS.NET 8.0运行MVC应用程序的网站(localhost:63798)。

也尝试做一个生成 - >清理解决方案,生成 - >重建解决方案之前击中F5在调试模式下再次运行。

如果有人以前经历过这件事,并有任何见解,我将非常感激。先谢谢你。

+0

您在视图中引用了哪些库? – 2013-03-12 21:10:01

+0

@DaveA在该视图中,'/ Scripts/jquery-1.9.1.js','/ Scripts/jquery.unobtrusive-ajax.js','/ Scripts/jquery.validate.js', '/ Scripts/jquery .validate.unobtrusive.js' – 2013-03-12 21:12:04

+1

您是否尝试清除缓存或从其他浏览器中打开?或者,使用chrome,调出开发人员工具并单击/Scripts/jquery.unobstrusive-ajax.js(非缩小)来查看文件的来源,以验证您的更改是否正在推送。我认为有些东西正在坚守旧版本。 – Tommy 2013-03-12 21:18:00

回答

17

Microsoft jQuery Unobtrusive Ajax包已被固定在2.0.30116.0版本来解决此问题。拨打.live()的电话已更改为使用.on()

尝试升级您的NuGet包以获取最新版本。

但是,使用jQuery Migrate包的建议很适合在其他插件或自己的​​代码中查找与jQuery 1.9+中的更改不兼容的问题。

+0

+1不需要使用迁移文件并找到一个完全可以通过升级Nuget软件包的解决方案,这样更好,而且你完全没问题当然,对于个人代码,如果需要,迁移文件对于升级遗留代码仍然非常有用。我会注意到链接库的2月升级。非常好的信息。 – Nope 2013-03-12 22:12:53

+1

这解决了我的问题。非常感谢你。我进入了'NuGet'并升级了微软的jQuery Unobtrusive Ajax。这很有趣,我以前找不到,因为我不知道搜索的确切名称,感谢分享NuGet Gallery链接,我不知道这样的网站(让我想起Java中的Maven Central)存在。 – 2013-03-13 14:19:23

10

live()已经在jQuery 1.9中删除以及其他一些功能。

如果您需要支持删除的功能,则还需要添加包含已删除功能的jQuery迁移文件。

添加类似下面的参考文献应包括所有你需要的功能:

<script src="http://code.jquery.com/jquery-migrate-1.1.1.js"></script> 

在调试模式迁移的文件也将增加警告到控制台,当你使用任何删除的功能通知您。这将帮助你慢慢取代它们,最终你可以删除迁移文件引用,只使用jQuery 1.9及更高版本。

有关迁移到jQuery 1.9的所有详细信息,请参阅以下jQuery博客文章。

+0

+1有很多有用的引用链接。但是,我已经从'jquery.unobtrusive-ajax.js'手动删除了.live(),请参阅我的代码片段。我会尝试使用jQuery的迁移,因为由于某种原因,我不能让我的更改jquery.unobtrusive-ajax.js坚持。 – 2013-03-12 21:29:20

+0

@PhilipTenn:希望对迁移文件的引用将它整理出来。迁移文件的整个想法是支持迁移和偏离课程的帮助开发者依赖第三方插件/库,他们不能直接改变他们自己。我不知道Nuget是否提供了下载迁移文件的参考资料,但如果您遇到Nuget问题,您可以尝试删除对jQuery文件的Nuget参考并手动下载所需文件,并将它们包含在您的项目中,包括迁移文件。 – Nope 2013-03-12 21:32:37

+0

非常感谢您的回答。它确实有帮助。我最终接受了jmoerdyk的回答,但您的信息和见解也非常有帮助。 – 2013-03-13 14:18:04