我正在尝试使BlockUI插件正常工作,并且它无法正常工作(当我使用$ .noConflict进行一些黑客攻击以使其暂时工作时,表现得非常奇怪。)
这是一个ASP.NET应用程序。每个调试器按页面加载的脚本是:
bootstrap.js
modernizr-2.6.2.js
respond.js
jquery-1.10.2.js
jquery.unobtrusive-ajax.js
jquery.blockui.js
<my javascript file>.js (Contains my javascript; no jquery plugins; I've tried commenting everything but BeginWorking() below in here).
当我用$ .noConflict()调用我的函数时,BlockUI代码第一次工作。在后续调用中,JQuery对象($)已被破坏,并且任何JQuery函数都不再起作用。见下面的代码:
function BeginWorking() { $('#loadingImage')[0].style.display = "inline";
$('#statusText')[0].style.display = "none";
$('#cancelButton')[0].style.display = "none";
$.noConflict();
$.blockUI();
重新加载页面并执行相同的代码,除了没有调用$ .noConflict()之外,Jquery对象不再受到损坏,但是在我调用$ .blockUI的行上出现以下错误(),在Chrome中:
Uncaught TypeError: Object function ( selector, context){
// the jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context, rootjQuery );
} has no method 'blockUI'
这似乎意味着找不到blockUI的插件文件,但显然它就在那里,因为如果我在$ .noConflict()之前,我可以调用$ .blockUI()。
所有这一切都会让我相信JQuery的多个版本正在运行,并且这打破了插件,但基于我的包含似乎不太可能。这些插件中的一个是否错误地试图覆盖JQuery对象,这是肯定的还是极有可能的? (请注意 - 尽管上述奇怪的工作暂时存在,但JQuery.blockUI也不起作用)是否还有其他原因造成这种行为?
答案 0 :(得分:0)
引用了相同版本的jQuery的多个副本,这些副本未在Chrome调试器中显示。 VS2013生成的默认ASP.NET应用程序在Layout.cshtml中生成这行代码,这是一个包含在其他内容页面中的页面:
@Scripts.Render("~/bundles/jquery")
此代码加载一组文件,包括详细版本的JQuery。我同时添加了我自己对jQuery相同详细版本的引用,调试工具显示只有一个jQuery副本。但是,根据我最初的怀疑,有不止一个jQuery包含。
至于您是否应该在ASP.NET应用程序中使用上述代码或按常规包含JQuery,请参阅以下帖子:Why use @Scripts.Render("~/bundles/jquery")