Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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"/>>
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?
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
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:
function ucFirstAllWords( str )
{
var pieces = str.split(" ");
for ( var i = 0; i < pieces.length; i++ )
{
var j = pieces.charAt(0).toUpperCase();
pieces = j + pieces.substr(1);
}
return pieces.join(" ");
}
source (post #10): http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript
Eu vou ter que usar os dois jquery e mais o no conflite poque uso tambem o framework prototype :upset:
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
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/
//onblur do campo com classe .title