【问题标题】:Can't get the jquery globalization to work无法让 jquery 全球化工作
【发布时间】:2012-02-09 03:05:20
【问题描述】:

我尝试使用 jQuery Globalization 插件来解决 jQuery 无障碍客户端验证的逗号问题。但是我尝试了很多解决方案,但没有很好的解决方案来解决这个问题。我在一台非英语本地化计算机上,重要的是我的客户输入像“123,66”而不是“123.66”这样的十进制值。 ASP.NET验证告诉我价格一定是数字!嗯?你是认真的吗 ?哈哈

我在尝试进行修复时收到此 javascript 错误。

$.global is undefined

这是我的代码。

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>

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);
}

我不明白..自从我添加了~/Scripts/globalize.js,它应该可以工作。

有什么想法吗?或者您可能有更好的解决方案来进行客户端验证工作并让我输入逗号作为十进制值?

【问题讨论】:

  • 感谢您提供范围验证器代码!

标签: jquery-globalization


【解决方案1】:

我终于找到了摆脱逗号分隔小数问题的方法!

这里是结果的图片!没有更多的验证问题。

修复步骤。

1- 获取Globalization library for jQuery

您必须获得最新的脚本!我还发现了一些已经过时的答案。
调用库的对象不再是 $.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>

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]);
}

Globalize.parseFloat => 这实际上会将任何包含 ',' 的内容替换为 '.'如果您选择了需要它的文化。

在此之后.. 您必须添加。这将使 globalize 函数与文化一起工作。

$(document).ready(function () {
        Globalize.culture('fr-CA');

        // Only there to show which culture are being used.
        console.log(Globalize.culture().name);
});

完整的代码看起来像......

<!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>

【讨论】:

  • Globalize.js 文件在 github url 的什么位置?
【解决方案2】:

好吧,为了解决同样的问题,我做了:

$.validator.addMethod("price",function(value){
    return /^(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
});

然后使用添加的方法作为规则:

$("#form").validate({
    rules: {
        price: "price"
    }
});

我从验证插件本身“借用”了验证器正则表达式,并将点 . 和逗号 ,(千位分隔符 X 小数分隔符)颠倒了。

【讨论】:

  • 你把那个 validate(...) 放在哪里了?
  • docs.jquery.com/Plugins/Validation - 查看第一个示例/演示的“查看源代码”
  • 我开始认为我不应该使用 asp.net mvc 的无障碍验证,而是只使用插件。 (我知道 asp.net mvc 使用该插件,但似乎我无法控制导致我很多问题的东西)
  • 好吧,您的代码无法使用无障碍验证,因为验证功能是由它处理的。我想避免使用自己用 jquery 编写 javascript 来进行验证。但是感谢您的尝试!如果您有兴趣,我已经发布了一个很好的解决方案。
  • 您不需要使用验证功能。您可以使用 HTML 输入的 class 属性添加规则:&lt;input class="price" /&gt;
【解决方案3】:

无论出于何种原因,我不得不更改我的 globalize 引用:

<script src="@Url.Content("~/Scripts/globalize/globalize.js")" type="text/javascript"</script>

<script type="text/javascript" src="~/Scripts/globalize/globalize.js"</script>

这解决了我的问题。疯了 30 分钟,直到我开始工作。如果有人能解释为什么我会欣赏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多