problema keyup Maiúsculas
-
19-09-2019 - |
Pergunta
Eu gostaria de ter uma entrada que iria mudar para maiúsculas em keyup. Então eu anexar um evento simples em keyup.
HTML
<input id="test"/>
Javascript (com jQuery)
$("#test").keyup(function(){
this.value = this.value.toUpperCase();
});
Mas descobri que no Chrome e IE, quando você empurra seta para a esquerda, o cursor se mover automaticamente ao fim. Eu observo que eu deveria detectar se a entrada é única carta. Devo usar faixa de código de acesso ou regexp para detecção?
Exemplo: http://jsbin.com/omope3
Solução
Ou você pode usar o seguinte (este é, provavelmente, mais rápido e mais elegante):
<input style="text-transform: uppercase" type='text'></input>
Mas que envia as costas valor digitado os dados do formulário, portanto, use um dos seguintes procedimentos para armazená-lo como em maiúsculas no banco de dados:
MySQL: UPPER(str)
PHP: strtoupper()
Outras dicas
Outra solução, se você usar o text-transform: uppercase; propriedade css:
<input id='test' style='text-transform: uppercase;' type='text'></input>
E com jQuery ajuda você a escolher o evento borrão :
$("#test").blur(function(){
this.value = this.value.toUpperCase();
});
Com esta solução, você não tem que superior os campos de banco de dados, você pode usar o cursor para o movimento e o usuário pode inserir / reescrever o texto no campo de entrada.
Use esta:
<input onkeyup="MakeMeUpper(this)" type="text"/>
E em seu JS Código Parte colocar:
function MakeMeUpper(f, e){
var actualValue = f.value;
var upperValue = f.value.toUpperCase();
if( actValue != upperValue){
f.value = upperValue;
}
}
Este código não vai mudar o texto se o usuário digitou algo que não é texto (esquerda ou seta para a direita).
Sim, parece que alguns navegadores mover o cursor para o final quando o valor é atualizado. Você poderia fazer isso:
$("#test").keyup(function(){
var upper = this.value.toUpperCase();
if (this.value != upper)
this.value = upper;
});
que só irá alterar o valor se ele precisa ser mudado. No entanto, isso ainda deixa você com o problema que se você digitar abd
, mover para a esquerda, c
hit para obter abcd
, o cursor ainda se movido para o final.
Javascript (com jQuery)
$("#test").keyup(function(){
$(this).val($(this).val().toUpperCase());
});
var str = $(this).val();
if (evt.keyCode != 37 && evt.keyCode != 39)
{
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
return letter.toUpperCase();
});
$(this).val(str);
}
Você provavelmente vai querer olhar para keyCode em sua função keyup.
var UP_ARROW = 38,
DOWN_ARROW = 40;
$('#test').keyup(function(evt){
if (evt.keyCode == UP_ARROW)
{
this.value = this.value.toUpperCase();
}
if (evt.keyCode == DOWN_ARROW)
{
this.value = this.value.toLowerCase();
}
});