Скопируйте и вставьте числа с запятой в числовое текстовое поле кендо.

У меня есть числовое текстовое поле кендо. Если я наберу число, например 123456, виджет автоматически отформатирует число с запятой и символом доллара, как и ожидалось. Однако, если я скопирую и вставлю число с запятой, например 123,456, виджет не примет это как ввод.

демонстрация JSfiddle

Как мне исправить это или переопределить поведение по умолчанию


person LP13    schedule 12.04.2017    source источник


Ответы (2)


поместите запятую, разделенную тысячным значением, и поместите валюту страны для сеток кендо

columns.Bound(e => e.Amount).ClientTemplate("#= Amount !== null ? kendo.toString(Amount, 'c', 'en-US') : ''#").Width("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’) -> 1234,23 доллара США

только запятая, разделенная двумя десятичными точками: columns.Bound(e => e.Amount).ClientTemplate("#= kendo.format('{0:N2}', kendo.toString(Amount)) #").Width( "5%").Заголовок("Сумма"); например - 1234,44 -> 1234,44 1234 -> 1234,00

person Meghana    schedule 25.07.2018

Я думаю, что это ошибка в Кендо...

В исходном коде для 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);

так что он проверяется на соответствие санированному значению, тогда все, кажется, работает так, как вы ожидаете... в противном случае я действительно не понимаю, зачем его санировать в первую очередь.

Я понимаю, что изменение исходного кода кендо на самом деле не является правильным решением, но я верю, что это ошибка, которую вам, возможно, придется обходить, пока она не будет исправлена.

Если у вас есть лицензия на кендо, я бы связался с их службой поддержки, чтобы проверить, является ли это ошибкой или нет. Если у вас нет лицензии, дайте мне знать, и я отправлю запрос, когда у меня будет время, так как у меня есть лицензия.

person The Dread Pirate Stephen    schedule 12.04.2017
comment
Спасибо! Срок действия моей лицензии на поддержку истек, поэтому я не могу создать тикет - person LP13; 13.04.2017