O uso de CSS text-transform: uppercase
não altera a entrada real, mas apenas sua aparência. Se você enviar os dados de entrada para um servidor, eles ainda serão minúsculos ou, no entanto, você os inseriu. Para realmente transformar o valor de entrada, você precisa adicionar o código javascript como abaixo:
document.querySelector("input").addEventListener("input", function(event) {
event.target.value = event.target.value.toLocaleUpperCase()
})
<input>
Aqui estou usando toLocaleUpperCase()
para converterinput
valor em maiúsculas. Funciona bem até que você precise editar o que inseriu, por exemplo, se você inseriu ABCXYZ e agora tenta alterá-lo para ABCLMNXYZ, ele se tornará ABCLXYZMN porque, após cada entrada, o cursor salta para o final.
Para superar esse salto do cursor, precisamos fazer as seguintes alterações em nossa função:
document.querySelector("input").addEventListener("input", function(event) {
var input = event.target;
var start = input.selectionStart;
var end = input.selectionEnd;
input.value = input.value.toLocaleUpperCase();
input.setSelectionRange(start, end);
})
<input>
Agora tudo funciona como esperado, mas se você tiver um PC lento, poderá ver o texto saltando de letras minúsculas para maiúsculas enquanto digita. Se isso o incomoda, é o momento de usar CSS, aplicar input: {text-transform: uppercase;}
ao arquivo CSS e tudo ficará bem.