Rus*_*ino 18 jquery-globalization
我尝试使用jQuery Globalization插件来修复jquery无阻碍客户端验证的逗号问题.但是我尝试了很多解决方案,没有很好的解决方案来解决这个问题.我在非英语本地化计算机上,这对我的客户输入十进制值如"123,66"而不是"123.66"很重要.ASP.NET验证告诉我,价格必须是一个数字!嗯?你是认真的吗 ?大声笑
当我尝试修复时,我收到此javascript错误.
$.global is undefined
Run Code Online (Sandbox Code Playgroud)
在这里我的代码.
Layout.cshtml
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/cultures/globalize.cultures.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.form.js")"type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/glob.fix.js")" type="text/javascript"></script>
</head>
<body>
@RenderBody()
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
glob.fix.js
$.validator.methods.range = function (value, element, param) {
var globalizedValue = value.replace(",", ".");
return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}
$.validator.methods.number = function (value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
}
Run Code Online (Sandbox Code Playgroud)
我无法理解..自从我补充说它应该有效~/Scripts/globalize.js.
任何的想法?或者您可能有一个更好的解决方案,让客户端验证工作,并让我输入逗号作为十进制值?
Rus*_*ino 21
我找到了用逗号分隔符最终摆脱小数问题的方法!
这是结果的图片!没有更多的验证问题.

修复的步骤.
你必须得到最新的脚本!我也找到了一些过时的答案.
调用库的对象不再是$.global这样或类似的东西了Globalize.
2-在项目中包含脚本.你必须在jquery.validation东西后添加它们.
<script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/cultures/globalize.cultures.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
3-替换验证器的一些方法.这将覆盖导致问题的"数字"和"范围"验证方法.
$.validator.methods.number = function (value, element) {
return this.optional(element) || !isNaN(Globalize.parseFloat(value));
}
$.validator.methods.range = function (value, element, param) {
return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]);
}
Run Code Online (Sandbox Code Playgroud)
Globalize.parseFloat=>这实际上会将包含','的任何内容替换为'.' 如果您选择了需要它的文化.
在此之后..你必须添加.这将使全球化功能与文化一起发挥作用.
$(document).ready(function () {
Globalize.culture('fr-CA');
// Only there to show which culture are being used.
console.log(Globalize.culture().name);
});
Run Code Online (Sandbox Code Playgroud)
完整的代码看起来像......
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/cultures/globalize.cultures.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.form.js")"type="text/javascript"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
return this.optional(element) || !isNaN(Globalize.parseFloat(value));
}
$.validator.methods.range = function (value, element, param) {
return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]);
}
$(document).ready(function () {
Globalize.culture('fr-CA');
// Only there to show which culture are being used.
console.log(Globalize.culture().name);
});
</script>
</head>
<body>
@RenderBody()
</body>
</html>
Run Code Online (Sandbox Code Playgroud)