У меня есть поле ввода
<input type = "text" value = "$">
Мне нужно, чтобы символ $ был зафиксирован в первом месте ввода, независимо от числа или символа, введенного внутри ввода.
В настоящее время я добавляю символ $ извне в функцию onChange
value = '$' + value
В принципе, пользователь не должен иметь возможность очистить символ $. Это должно быть исправлено. Как этого добиться?
Я использую javascript и React.
Так что плохого в использовании подхода onChange ??



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


При изменении ввода вы можете сначала удалить все вхождения $ из значения. Затем добавьте к значению префикс $.
Попробуйте следующее:
function inputValue(el){
el.value = el.value.replace(/[$+]/g, ''); //replace all $ with empty string
el.value = '$' + el.value; //prepend $ to the input value
}<input type = "text" value = "$" oninput = "inputValue(this)">Если вы хотите разрешить только числа и точку (.), просто используйте:
el.value = el.value.replace(/[^0-9.]/g, '');
Вы помещаете свое поле ввода в div. Этот div показывает заполнитель для вашего поля ввода и заставляет его выглядеть так, как будто внутри действительно есть символ $, который не редактируется.
.foo {
padding-left: 20px;
}
.placeholder
{
position: relative;
}
.placeholder::after
{
position: absolute;
left: 5px;
top: 1px;
content: attr(data-placeholder);
pointer-events: none;
opacity: 0.6;
}<div class = "placeholder" data-placeholder = "$">
<input type = "text" class = "foo" value = "">
</div>
<button type = "button" onclick = "alert(document.getElementsByClassName('foo')[0].value)">
Get Value
</button>
Вы можете попробовать использовать CSS, чтобы создать впечатление, что символ «$» является частью ввода, сделав границу вокруг них обоих. Внешний вид символа $ - это то, что вам нужно, а не функциональность ввода.