Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JonatanMachado

Como deixar somente a primeira letra maiúscula - javascript

Recommended Posts

Olá pessoal XD
O código já esta funcionando porem, O campo que vou implantar ele e para o cliente colocar o nome dele.
EX: O cliente digita o nome dele assim.

JONATAN DOS SANTOS MACHADO

O correto seria.

Jonatan dos Santos Machado

mas o código coloca para todas as palavras digitadas a primeira letra maiúscula assim.

Jonatan Dos Santos Machado

Eu queria coloca algumas exceções ex: dos, das, de etc.

Codigo:

<script>
function maiuscula(id){

var letra=document.getElementById(id).value;
letra=letra.split("");
var tmp="";
for(i=0;i<letra.length;i++){
if(letra[i-1]){
if(letra[i-1]==" "){letra[i]=letra[i].replace(letra[i],letra[i].toUpperCase());}
}
else{letra[i]=letra[i].replace(letra[i],letra[i].toUpperCase());}
tmp+=letra[i];
}
document.getElementById(id).value=tmp;
}
</script>



<input type="text" id="billing:firstname" onkeyup="maiuscula('billing:firstname')" name="billing[firstname]" value="" title="Nome" class="t1 required-entry"/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Você pode adicionar uma condição onde você calcula a quantidade de caracteres da variavel letra, se letras.length <= 3 você não faz o captalize no texto. Ou criar um array de strings que você não deseja que sejam alterados e realizar uma validação com ela.

 

Tenho este script com jQuery: http://jsfiddle.net/9YzYF/

 

$.fn.capitalize = function () {
    //palavras para ser ignoradas
  var wordsToIgnore = ["to", "and", "the", "it", "or", "that", "this"],
    minLength = 3;

  function getWords(str) {
    return str.match(/\S+\s*/g);
  }
  this.each(function () {
    var words = getWords(this.value);
    $.each(words, function (i, word) {
      // somente continua se a palavra nao estiver na lista de ignorados
      if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) {
        words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
      }
    });
    this.value = words.join("");
  });
};

//onblur do campo com classe .title
$('.title').on('blur', function () {
  $(this).capitalize();
}).capitalize();

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá

 

Você pode adicionar uma condição onde você calcula a quantidade de caracteres da variavel letra, se letras.length <= 3 você não faz o captalize no texto. Ou criar um array de strings que você não deseja que sejam alterados e realizar uma validação com ela.

 

Tenho este script com jQuery: http://jsfiddle.net/9YzYF/

 



$.fn.capitalize = function () {
    //palavras para ser ignoradas
  var wordsToIgnore = ["to", "and", "the", "it", "or", "that", "this"],
    minLength = 3;

  function getWords(str) {
    return str.match(/\S+\s*/g);
  }
  this.each(function () {
    var words = getWords(this.value);
    $.each(words, function (i, word) {
      // somente continua se a palavra nao estiver na lista de ignorados
      if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) {
        words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
      }
    });
    this.value = words.join("");
  });
};

//onblur do campo com classe .title
$('.title').on('blur', function () {
  $(this).capitalize();
}).capitalize();

Muito bom esse script porem quando o cliente digitar TUDO EM LETRAS MAIÚSCULAS o script deixa tudo em letras maiúsculas XD

Obrigado pela resposta Jozimar Back

 

Teria como você me ajudar a criar um array de strings com aquele codigo que eu coloquei na pergunta, com as palavras dos, das, de, da?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Fiz uma pequena alteração no código.

Adicionei toLowerCase para sempre deixar as letras minusculas apos a primeira fatia de string da palavra fiz assim:

(tive de trocar o id billing:firstname por billing-firstname para funcionar O.O)

 

function maiuscula(id) {
            //palavras para ser ignoradas
            var wordsToIgnore = ["DOS", "DAS", "de", "do"],
            minLength = 3;
            var str = $('#'+id).val(); 
            var getWords = function(str) {
                return str.match(/\S+\s*/g);
            }
            $('#'+id).each(function () {
                var words = getWords(this.value);
                $.each(words, function (i, word) {
                    // somente continua se a palavra nao estiver na lista de ignorados
                    if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) {
                        words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1).toLowerCase();
                    } else{
                    words[i] = words[i].toLowerCase();}
                });
                this.value = words.join("");
            });
        };


<input type="text" id="billing-firstname" onkeyup="maiuscula('billing-firstname')" name="billing[firstname]" value="" title="Nome" class="t1 required-entry"/>

Veja se funciona =D

Estou olhando seu código e tentando colocar a validação.

Att, Back

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou muito bom Jozimar BacK parabéns eu tava penando para fazer funcionar

Obrigado! XD



So mais uma duvida XD

Sera que não tem como deixar o id billing:firstname?

 

vlw XD



Coloquei no meu site porem estou usando o jquery-1.4.2.min.js ai não funcionou :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Uma alternativa poderia ser você adicionar uma classe ao campo e usar essa classe para manipular ele:

 

<input type="text" id="billing:firstname" onkeyup="maiuscula('.firstname')" name="billing[firstname]" value="" title="Nome" class="t1 required-entry firstname"/>

 

Logo abaixo modifiquei um pouco o código para aceitar tanto classes como id's:

 

function maiuscula(id) {
            //palavras para ser ignoradas
            var wordsToIgnore = ["DOS", "DAS", "de", "do", "Dos", "Das"],
            minLength = 3;
            var str = $(id).val(); 
            var getWords = function(str) {
                return str.match(/\S+\s*/g);
            }
            $(id).each(function () {
                var words = getWords(this.value);
                $.each(words, function (i, word) {
                    // somente continua se a palavra nao estiver na lista de ignorados
                    if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) {
                        words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1).toLowerCase();
                    } else{
                    words[i] = words[i].toLowerCase();}
                });
                this.value = words.join("");
            });
        };

Link do código: http://jsfiddle.net/backos/2q74V/

Espero ter ajudado.

Att, Back

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.