ASP.NET MVC 4:无法修改jQuery Unobtrusive Ajax

14

使用ASP.NET MVC 4NuGet来管理包。

通过NuGet升级到jQuery 1.9.1后,我开始收到有关在jQuery 1.9.x中删除live()函数的JavaScript错误。

我按F5以从VS.NET中的调试模式运行,转到登录页面,然后得到以下结果:

Error Microsoft JScript

发现这个StackOverflow答案:https://dev59.com/AGYq5IYBdhLWcg3wjBQM#14512797并对~\Scripts\jquery.unobtrusive-ajax.js进行了4次更改。

我的~\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 Express 8.0 Web站点(localhost:63798),该站点在VS.NET下运行MVC应用程序。

在再次以调试模式运行之前,我还尝试了Build->Clean Solution,Build->Rebuild Solution。

如果有人曾经遇到过这种情况,并且有任何见解,我将非常感激。谢谢。


你的视图中引用了哪些库? - Dave Alperovich
@DaveA 针对该视图,需要使用以下脚本:/Scripts/jquery-1.9.1.js/Scripts/jquery.unobtrusive-ajax.js/Scripts/jquery.validate.js/Scripts/jquery.validate.unobtrusive.js - Philip Tenn
1
你尝试过清除缓存或从另一个浏览器访问吗?或者,使用Chrome,打开开发者工具,点击/Scripts/jquery.unobstrusive-ajax.js(非压缩)以查看文件源代码,以验证您的更改是否被推送。我认为有些东西仍然保留着旧版本。 - Tommy
2
你是否使用了最新的Unobtrusive Ajax包?我在我的MVC4项目中使用的最新版本(2.0.30116.0)使用.on()而不是.live()。 - jmoerdyk
@Tommy感谢你的建议和见解,我很感激。我想可能是因为我在使用NuGet并更新了unobtrusive ajax后,NuGet仍然保留了一个纯粹的副本。我遵循jmoerdyk的答案,解决了我的问题。 - Philip Tenn
2个回答

17
Microsoft jQuery Unobtrusive Ajax包在版本2.0.30116.0中已经修复了这个问题,将对.live()的调用改为使用.on()
尝试升级你的NuGet包以获取最新版本。
然而,建议使用jQuery Migrate包来查找其他插件或你自己的代码中与jQuery 1.9+的更改不兼容的问题是一个好主意。

不必使用迁移文件,而是通过升级Nuget包找到完全有效的解决方案要好得多。如果需要升级遗留代码,对于个人代码,您当然是完全正确,迁移文件仍然非常有用。我将会记下链接库的二月升级信息。非常好的信息。 - Nope
1
问题解决了。非常感谢您。我进入了“NuGet”并升级了Microsoft jQuery Unobtrusive Ajax。很有趣,之前找不到它,因为我不知道要搜索的确切名称,感谢您分享NuGet Gallery链接,我不知道存在这样的网站(让我想起Java中的Maven Central)。 - Philip Tenn

10

live() 在 jQuery 1.9 中已被移除,连同其他一些功能一起。

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

添加以下类似引用将包括您所需的所有功能:

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

在调试模式下,迁移文件还会向控制台添加警告,提示您使用了任何已删除的功能。这将有助于您逐步替换它们,最终能够删除迁移文件引用,仅使用jQuery 1.9及以上版本。

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


非常感谢提供这么多有用的参考链接。但是,我已经手动从jquery.unobtrusive-ajax.js中删除了.live(),请查看我的代码片段。由于某种原因,我无法使我的更改生效,所以我将尝试使用jquery-migrate。 - Philip Tenn
@PhilipTenn:希望提到迁移文件可以解决问题。迁移文件的整个想法是支持迁移,当然也帮助依赖于第三方插件/库但无法直接更改它们的开发人员。我不知道Nuget是否有引用下载迁移文件,但如果您在Nuget上遇到问题,可以尝试删除Nuget对jQuery文件的引用,手动下载所需文件并将其包含在项目中,包括迁移文件。 - Nope
非常感谢您的回答。它确实有所帮助。我最终接受了jmoerdyk的答案,但是您提供的信息和见解也非常有用。 - Philip Tenn
@PhilipTenn:你说得完全正确。更新NuGet包是正确的方法。我不知道二月份的发布,我一定会记住的 :) - Nope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接