0

我有剑道数字文本框。如果我输入像 123456 这样的数字,小部件会按预期自动使用逗号和美元符号格式化数字。但是,如果我用逗号复制并粘贴数字,例如123,456,小部件不接受它作为输入。

JSfiddle 演示

我该如何解决这个问题或覆盖默认行为

4

2 回答 2

1

用分隔的千值放置逗号,并为剑道网格放置国家/地区货币

columns.Bound(e => e.Amount).ClientTemplate("#= Amount !== null ? kendo.toString(Amount, 'c', 'en-US') : ''#").Width("5 %").Title("金额"); 例如:

kendo.toString(1234.23, 'c', 'de-DE') –> 1.234,23 €</p>

kendo.toString(1234.23, 'c', 'sv-SE') –> 1.234,23 kr

kendo.toString(1234.23, 'c', 'en-US') --> $1,234.23

只有逗号分隔,两个小数点:columns.Bound(e => e.Amount).ClientTemplate("#= kendo.format('{0:N2}', kendo.toString(Amount)) #").Width( "5%").Title("金额"); 例如 - 1234.44 -> 1,234.44 1234 -> 1,234.00

于 2018-07-25T10:17:23.580 回答
0

我认为这是剑道的一个错误......

在 NumericTextBox 的源代码中,有一个 _paste 处理程序,它看起来像是试图根据区域性的数字格式对输入进行清理,但随后它会针对未清理的值进行验证......似乎它应该使用已清理的值。

这是实现:

_paste: function (e) {
            var that = this;
            var element = e.target;
            var value = element.value;
            var numberFormat = that._format(that.options.format);
            setTimeout(function () {
                var result = that._parse(element.value);
                var isValid = that._numericRegex(numberFormat).test(element.value);
                if (result === NULL || that._adjust(result) !== result || !isValid) {
                    that._update(value);
                }
            });
        },

因此,如果您粘贴“123,456”,它将 _parse() 到 123456(因为它知道“,”是千位分隔符)但是 isValid 检查仍在检查“123,456”,这是错误的,因此它会恢复到之前的值。

如果将 isValid 行更改为

var isValid = that._numericRegex(numberFormat).test(result);

这样它就可以根据经过清理的值进行验证,然后一切似乎都可以按您的预期工作....否则我真的不明白为什么首先要对其进行清理。

我意识到更改剑道源代码并不是一个真正有效的解决方案,但我确实相信这是一个错误,您可能必须解决它,直到它被修复。

如果您有剑道许可证,我会联系他们的支持以验证它是否是错误。如果您没有许可证,请告诉我,我会在有时间时提交请求,因为我有许可证。

于 2017-04-12T21:00:52.900 回答