Я извиняюсь. Я нашел sulution. Это было в webpack / babel-loader. Потому что я включил каталог src, и мой компонент Word находился вне src
Предположите, что все свойства в Объекте-событии неизменны. Спецификация DOM не обращается к тому, что происходит, когда Вы изменяете те значения вручную.
Вот логика, в которой Вы нуждаетесь: прислушайтесь ко всем ключевым событиям. Если это - период, подавите событие и вручную добавьте запятую в позиции курсора. (Вот фрагмент кода для вставки произвольного текста в позиции курсора.)
Вы подавили бы событие в Firefox путем вызова event.preventDefault()
; это говорит браузеру не продолжать действие по умолчанию, связанное с этим событием (в этом случае, вводя символ). Вы подавили бы событие в IE путем установки event.returnValue
кому: false
.
Если это не период, возвратитесь рано из своего обработчика.
Попробуйте это. Это работает над всеми браузерами:
window.onload = function () {
var input = document.getElementById("mytext");
input.onkeypress = function () {
var evt = arguments[0] || event;
var char = String.fromCharCode(evt.which || evt.keyCode);
// Is it a period?
if (char == ".") {
// Replace it with a comma
input.value += ",";
// Cancel the original event
evt.cancelBubble = true;
return false;
}
}
};
Обновление: Pier Luigi указал на проблему с вышеупомянутым. Это не заботится о позиции курсора, не являющейся в конце текста. Это добавит команду в конец даже при вставке некоторого текста в значение.
Решение было бы, вместо того, чтобы добавить запятую, моделировать событие нажатия клавиши для ключа запятой. К сожалению, способ диспетчеризировать синтетической работы событий в различных браузерах, кажется, показывает большое разнообразие и не является легким подвигом. Я буду видеть, могу ли я найти хороший и общий метод для него.
Технически Вы просто хотите заменить все точки запятыми.
document.getElementById('mytext').onkeyup = function(){
this.value = this.value.replace('.', ',');
}
Если я смотрю на документ Событий Объектной модели официального документа, поля событий от нажатия мыши определяются как только для чтения. События клавиатуры не определяются там, я предполагаю, что Mozilla следовал за этой политикой для них.
Так в основном, если нет некоторый умный прием, Вы не можете изменить событие путем, Вы хотите. Вероятно, необходимо прервать ключ и вставить символ (сырые данные или переведенный), где каре, способ, которым делают редакторы HTML JS.
Это должно действительно быть сделано на лету? При сборе информации, которая будет отправлена на форму или отправлена базе данных, разве не было бы лучше изменить данные, после того как она была отправлена? Тем путем пользователь никогда не видит запутывающего изменения.