jQuery 由于发布模式下的包缩小而崩溃
jQuery crash because of bundle minification in release mode
我有 jquery 个捆绑包:
bundles.Add(new ScriptBundle("~/bundle/jquery").Include(
ScriptsPath("jquery-2.0.3.js"),
ScriptsPath("jquery.validate.js"),
ScriptsPath("jquery.validate.unobtrusive.js"),
ScriptsPath("jquery-ui-1.10.3.js"),
ScriptsPath("jquery.validate.unubtrusive.config.js"),
ScriptsPath("jquery.easing.1.3.js "),
ScriptsPath("jquery.unobtrusive-ajax.min.js"),
ScriptsPath("jquery.validate.custom.attributes.js") ...
在用户注册页面上,我有登录和注册表单,因此表单输入的名称中有 Register.
和 Login.
前缀。基本上它看起来像:
<input type="text" ... id="Register_Email" name="Register.Email" />
<input type="password" ... id="Register_Password" name="Register.Password" />
当我在发布模式下发布我的应用程序时,我在捆绑文件中收到此错误:
这显然是因为输入名称中的点。如何保存点并解决此问题?我已经尝试 BundleTable.EnableOptimizations = false;
但它没有帮助,我不认为这是合适的解决方案,因为它破坏了捆绑包的目的。另请注意,问题仅在 Release 模式下发生。
编辑:
捆绑文件列表包含一个我自己的脚本文件,它包含我的 ForbidHtmlAttribude
:
的客户端验证逻辑
jquery.validate.custom.attributes.js
jQuery.validator.unobtrusive.adapters.add(
'forbidhtmlattribute',
['htmlregexpattern'],
function (options) {
options.rules['forbidhtmlattribute'] = options.params;
options.messages['forbidhtmlattribute'] = options.message;
}
);
jQuery.validator.addMethod('forbidhtmlattribute', function (value, element, params) {
if (value === null || value === undefined) return true;
var regex = params['htmlregexpattern'];
return !value.match(regex);
}, '');
问题很可能出在这一行:
if (value === null || value === undefined) return true;
尝试改成
if ((value === null) || (value === undefined)) return true;
解释:
MS 缩小算法删除了不必要的空格。它 'knows' 语言关键字,如“var”或 'return',但 'null' 不是其中之一。因此,缩小的行将是
if(value===null||value===undefined)return true;
现在从 JavaScript 的角度来看,我们有一个名为“null||value
”的奇怪变量。将条件括在括号中解决问题:
if(value===null)||(value===undefined)return true;
我有 jquery 个捆绑包:
bundles.Add(new ScriptBundle("~/bundle/jquery").Include(
ScriptsPath("jquery-2.0.3.js"),
ScriptsPath("jquery.validate.js"),
ScriptsPath("jquery.validate.unobtrusive.js"),
ScriptsPath("jquery-ui-1.10.3.js"),
ScriptsPath("jquery.validate.unubtrusive.config.js"),
ScriptsPath("jquery.easing.1.3.js "),
ScriptsPath("jquery.unobtrusive-ajax.min.js"),
ScriptsPath("jquery.validate.custom.attributes.js") ...
在用户注册页面上,我有登录和注册表单,因此表单输入的名称中有 Register.
和 Login.
前缀。基本上它看起来像:
<input type="text" ... id="Register_Email" name="Register.Email" />
<input type="password" ... id="Register_Password" name="Register.Password" />
当我在发布模式下发布我的应用程序时,我在捆绑文件中收到此错误:
这显然是因为输入名称中的点。如何保存点并解决此问题?我已经尝试 BundleTable.EnableOptimizations = false;
但它没有帮助,我不认为这是合适的解决方案,因为它破坏了捆绑包的目的。另请注意,问题仅在 Release 模式下发生。
编辑:
捆绑文件列表包含一个我自己的脚本文件,它包含我的 ForbidHtmlAttribude
:
jquery.validate.custom.attributes.js
jQuery.validator.unobtrusive.adapters.add(
'forbidhtmlattribute',
['htmlregexpattern'],
function (options) {
options.rules['forbidhtmlattribute'] = options.params;
options.messages['forbidhtmlattribute'] = options.message;
}
);
jQuery.validator.addMethod('forbidhtmlattribute', function (value, element, params) {
if (value === null || value === undefined) return true;
var regex = params['htmlregexpattern'];
return !value.match(regex);
}, '');
问题很可能出在这一行:
if (value === null || value === undefined) return true;
尝试改成
if ((value === null) || (value === undefined)) return true;
解释:
MS 缩小算法删除了不必要的空格。它 'knows' 语言关键字,如“var”或 'return',但 'null' 不是其中之一。因此,缩小的行将是
if(value===null||value===undefined)return true;
现在从 JavaScript 的角度来看,我们有一个名为“null||value
”的奇怪变量。将条件括在括号中解决问题:
if(value===null)||(value===undefined)return true;