JQuery UI与Globalize 1.x不兼容

时间:2018-02-22 15:00:37

标签: javascript jquery jquery-ui globalize jquery-ui-spinner

我在使用带有jQuery UI微调器的globalize.js 1.x时遇到问题。

我想在微调器中的数字旁边显示相应的货币符号。但是我从以下两个函数中得到了错误:

Globalize.format
Globalize.parseFloat

显然,这两个功能在Globalize 1.x中不可用。相反,他们引入了新功能:

.parseNumber( value [, options])
.formatNumber( value [, options] )
.formatCurrency( value, currency [, options] )
.formatDate( value, pattern )

我曾尝试在jQuery UI源代码中使用这些函数,但它完全破坏了微调器。

知道如何解决这个问题吗?

我正在使用:

jQuery UI - v1.12.1 全球化v1.3.0

1 个答案:

答案 0 :(得分:0)

如果您遇到类似问题,请执行以下操作:

1.将Globalize添加到您的应用中,我已经按照以下教程进行了大量帮助:

https://js.devexpress.com/Documentation/Guide/Widgets/Common/UI_Widgets/Localization_-_Use_Globalize/

2.将jquery UI添加到您的项目中。

3.创建新的javascript文件并将其放在jquery UI文件之后。

4.添加以下脚本到新的js文件:

$(function ($) {
    $.ui.spinner.prototype._parse = function(val) {
    if (typeof val === "string" && val !== "") {
        val = val.match(/([0-9,.]+)/)[0];
        if (window.Globalize && this.options.numberFormat) {
            val = Globalize(this.options.culture).parseNumber(val);
        } else 
            val = (+val);
    }
    return val === "" || isNaN(val) ? null : val;
    };
    $.ui.spinner.prototype._format = function (value) {
        if (value === "") {
            return "";
        }
        if (window.Globalize && this.options.numberFormat) {
            var formatter = null;
            if (this.options.numberFormat === 'n' || this.options.numberFormat.match('^[n][0-9]')) {
                var fractionDigits = this.options.numberFormat.replace(/^\D+/g, '');
                if (fractionDigits) {
                    formatter = Globalize.numberFormatter({ minimumFractionDigits: fractionDigits });
                } else
                    return value;
            } else if (this.options.numberFormat === "c" || this.options.numberFormat.length === 3) {
                var currencyCode = this.options.numberFormat;
                 if (currencyCode.length !== 3)
                    currencyCode = 'GBP';
                if (currencyCode.length !== 3)
                    return value;
                formatter = Globalize.currencyFormatter(currencyCode);
            }
            return formatter(value);
        }
        else
            return value;
    }
}(jQuery));

希望它有所帮助。