¿Cómo se configura automáticamente el cuadro de texto en mayúsculas?

131

Estoy usando el siguiente atributo de estilo para establecer la entrada del usuario en mayúsculas para que cuando el usuario comience a escribir en el cuadro de texto, por ejemplo railway, se deba alterar a mayúsculas como si RAILWAY el usuario tuviera que presionar el botón Bloq Mayús.

Este es el código que estoy usando para la entrada:

<input type = "text" class = "normal" name = "Name" size = "20" maxlength = "20"> <img src="../images/tickmark.gif" border="0" style='text-transform:uppercase'/>

Pero no obtengo el resultado deseado al usar este atributo.

ybc126
fuente
2
Como se menciona a continuación, tenga cuidado de tener espacios entre = y valores "text"
Jonathan Safa

Respuestas:

261

Has puesto el styleatributo en la <img>etiqueta, en lugar de <input>.

Tampoco es una buena idea tener los espacios entre el nombre del atributo y el valor ...

<input type="text" class="normal" 
       name="Name" size="20" maxlength="20" 
       style="text-transform:uppercase" /> 
<img src="../images/tickmark.gif" border="0" />

Tenga en cuenta que esta transformación es puramente visual y no cambia el texto que se envía en POST.

Freefaller
fuente
67
Tenga en cuenta que si envía estos datos a través de una POST, los enviará como los haya escrito, no como se muestran en la pantalla.
Vincent Poirier
@freefaller, cambió todas las entradas a mayúsculas, pero insertar en mysql es texto en minúsculas, ¡cómo cambiar la letra mayúscula!
David Jaw Hpan
66
@David, mira el comentario anterior. La transformación es puramente visual. No cambia el caso del texto subyacente que se envía de vuelta al servidor. Si desea guardar el texto en mayúsculas, debe transformarlo en el servidor antes de guardarlo
freefaller
77
Esta no es una solución completa, ya que el marcador de posición ahora está en mayúscula (que en la mayoría de los casos no debería serlo). No hay otra manera que usar JavaScript.
tomericco
1
Los futuros lectores que desean que se realicen los cambios en el valor en lugar de ser puramente visual, ver la respuesta de Burak Tokak .
Dinei
59

Creo que la solución más sólida que asegurará que se publique en mayúsculas es usar el método de entrada en línea como:

<input oninput="this.value = this.value.toUpperCase()" />

EDITAR

Algunas personas se han quejado de que el cursor salta al final al editar el valor, por lo que esta versión ligeramente expandida debería resolver eso

<input oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" />

Yehuda Schwartz
fuente
36

Las respuestas con el text-transformation:uppercaseestilo no enviarán datos en mayúsculas al servidor al enviar, lo que puede esperar. En su lugar, puede hacer algo como esto:

Para su entrada HTML use onkeydown:

<input name="yourInput" onkeydown="upperCaseF(this)"/>

En tu JavaScript:

function upperCaseF(a){
    setTimeout(function(){
        a.value = a.value.toUpperCase();
    }, 1);
}

Con la upperCaseF()función en cada tecla presionada, el valor de la entrada se convertirá en mayúscula.

También agregué un retraso de 1 ms para que el bloque de código de función se active después de que ocurriera el evento keydown.

Tokak Burak
fuente
44
Uno podría usar el inputevento en lugar de keydowny deshacerse de la setTimeoutsolución.
Dinei
1
Esto funciona, pero ¿cómo evitas el feo salto de la segunda fracción de minúscula a mayúscula?
Jonathan Safa
77
Al ir con la idea del "evento de entrada", agregar este atributo al inputelemento parece funcionar bien:oninput="this.value = this.value.toUpperCase()"
Tommy Stanton
3
@ JonathanSafa Use esto además de la text-transform:uppercasesolución de estilo css anterior para hacer que la entrada siempre aparezca en mayúscula
miknik
1
Cuando un usuario edita el texto existente y coloca el cursor en otro lugar que no sea el final, entonces el cursor saltará al final con cada carácter escrito. ¿Hay alguna manera de preservar la posición del cursor y de transformar el texto en mayúsculas?
Mike Wodarczyk
17

El problema con la primera respuesta es que el marcador de posición también estará en mayúscula. En caso de que SOLO quiera que la entrada sea mayúscula, use la siguiente solución.

Para seleccionar solo un elemento de entrada no vacío, coloque el atributo requerido en el elemento:

<input type="text" id="name-input" placeholder="Enter symbol" required="required" />

Ahora, para seleccionarlo, use el :validpseudo-elemento:

#name-input:valid { text-transform: uppercase; }

De esta manera, solo escribirá en mayúsculas los caracteres ingresados.

tomericco
fuente
44
Esta respuesta no funciona y tampoco tiene sentido. ¿Por qué una selección solo si la entrada es válida afectaría el texto de entrada y no el marcador de posición? Supongo que si el espacio en blanco no era un valor válido, esto podría funcionar por casualidad. Usé
Ben Thurley
66
Mi solución funciona muy bien solo para los campos de entrada de texto requeridos. Si intentas generalizarlo, no funcionará. Responde la pregunta anterior. Probablemente estés haciendo una pregunta diferente.
tomericco
Esta es una solución realmente útil, y es exactamente lo que necesitaba. No se ajustará a todas las situaciones, ya que depende del campo requerido, ¡pero definitivamente es útil tenerlo en la caja de herramientas!
Tim Mackey el
9

tratar

<input type="text" class="normal" 
       style="text-transform:uppercase" 
       name="Name" size="20" maxlength="20"> 
 <img src="../images/tickmark.gif" border="0"/>

En lugar de imagen, coloque la etiqueta de estilo en la entrada porque está escribiendo en la entrada, no en la imagen

Daniel Marín
fuente
44
Eso, sin embargo, también hace que el texto del marcador de posición sea mayúscula.
Kazim Zaidi
5

Establecer el siguiente estilo para establecer todos los cuadros de texto en mayúsculas

input {text-transform: uppercase;}
Mukund
fuente
3

El problema con CSS Styling es que no está cambiando los datos, y si no desea tener una función JS, intente ...

<input onkeyup="this.value = this.value.toUpperCase()" />

por sí solo, verá que el campo se capitaliza en el keyup, por lo que puede ser conveniente combinar esto con los style='text-transform:uppercase'otros que han sugerido.

usuario3094755
fuente
2

El uso de CSS text-transform: uppercaseno cambia la entrada real, sino que solo cambia su aspecto. Si envía los datos de entrada a un servidor, seguirá en minúsculas o como lo haya ingresado. Para transformar realmente el valor de entrada, debe agregar el código de JavaScript de la siguiente manera:

document.querySelector("input").addEventListener("input", function(event) {
  event.target.value = event.target.value.toLocaleUpperCase()
})
<input>

Aquí estoy usando toLocaleUpperCase()para convertir el inputvalor a mayúsculas. Funciona bien hasta que necesite editar lo que ingresó, por ejemplo, si ingresó ABCXYZ y ahora intenta cambiarlo a ABCLMNXYZ, se convertirá en ABCLXYZMN porque después de cada entrada el cursor salta al final.

Para superar este salto del cursor, tenemos que hacer los siguientes cambios en nuestra función:

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>

Ahora todo funciona como se esperaba, pero si tiene una PC lenta, puede ver que el texto salta de minúsculas a mayúsculas mientras escribe. Si esto te molesta, este es el momento de usar CSS, aplicar input: {text-transform: uppercase;}al archivo CSS y todo estará bien.

Gaurish Gangwar
fuente
1

Esto mostrará la entrada en mayúscula y enviará los datos de entrada a través de la publicación en mayúscula.

HTML

<input type="text" id="someInput">

JavaScript

var someInput = document.querySelector('#someInput');
someInput.addEventListener('input', function () {
    someInput.value = someInput.value.toUpperCase();
});
Shateel Ahmed
fuente
0

Como nadie lo sugirió:

Si desea utilizar la solución CSS con marcadores de posición en minúsculas, solo tiene que diseñar los marcadores de posición por separado. Divida los 2 estilos de marcador de posición para la compatibilidad con IE.

input {
    text-transform: uppercase;
}
input:-ms-input-placeholder {
    text-transform: none;
}
input::placeholder {
    text-transform: none;
}
The below input has lowercase characters, but all typed characters are CSS-uppercased :<br/>
<input type="text" placeholder="ex : ABC" />

LePatay
fuente
0

Pruebe la solución a continuación. Esto también tendrá cuidado cuando un usuario ingrese solo un espacio en blanco en el campo de entrada en el primer índice.

document.getElementById('capitalizeInput').addEventListener("keyup",   () => {
  var inputValue = document.getElementById('capitalizeInput')['value']; 
  if (inputValue[0] === ' ') {
      inputValue = '';
    } else if (inputValue) {
      inputValue = inputValue[0].toUpperCase() + inputValue.slice(1);
    }
document.getElementById('capitalizeInput')['value'] = inputValue;
});
<input type="text" id="capitalizeInput" autocomplete="off" />

Hardik Shimpi
fuente
-2
<script type="text/javascript">
    function upperCaseF(a){
    setTimeout(function(){
        a.value = a.value.toUpperCase();
    }, 1);
}
</script>

<input type="text" required="" name="partno" class="form-control" placeholder="Enter a Part No*" onkeydown="upperCaseF(this)">
SUDHAKAR ARUNACHALAM
fuente
44
¿Cómo se distingue esta respuesta de todas las que ya se han dado?
Capricornio