我有剑道数字文本框。如果我像123456一样输入数字,小部件会自动按预期用逗号和美元符号格式化数字。但是,如果我复制并粘贴带有逗号的数字,例如123,456
,小部件不接受它作为输入。
JSfiddle demo
如何解决此问题或覆盖定义行为
用分隔的千值放置逗号,并为剑道网格放置国家货币
列。绑定(e => e.金额)。ClientTemplate("#= amount !== null ?kendo.toString(Amount, 'c', 'en-US') : ''#").宽度("5%")。标题("金额"); 例如:
kendo.toString(1234.23, 'c', 'de-DE') –> 1.234,23 €
kendo.toString(1234.23, 'c', 'sv-SE') –> 1.234,23 kr
kendo.toString(1234.23, 'c', 'en-US') –> $1,234.23
只有逗号用两个小数点分隔: 列。绑定(e => e.金额)。ClientTemplate("#= kendo.format('{0:N2}', kendo.toString(Amount)) #").宽度("5%")。标题("金额"); 例如 - 1234.44 -> 1,234.44 1234-> 1,234.00
我认为这是剑道中的一个错误......
在 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);
以便它根据净化值进行验证,然后一切似乎都按您的预期工作......否则我真的不明白为什么要首先对其进行消毒。
我意识到更改剑道源代码并不是一个有效的解决方案,但我相信这是一个错误,您可能需要解决它,直到它被修复。
如果您有剑道许可证,我会联系他们的支持人员以验证它是否是错误。 如果您没有许可证,请告诉我,当我有时间时,我会提交请求,因为我有许可证。