2017-09-08 20 views
7

1) ilk harfini büyük harfle ve diğer küçük harfleri olarak yüklemeye çalışıyorum. Kullanıcı girdiye yazıyorsa, otomatik olarak dönüşmelidir. Örnekler:İlk harfi büyük harfle ve geri kalan küçük harf nasıl yazılır? [JS]

"Isaac guilherme Araújo" Bağlı değerler ile isimleri vardır Brezilya'da "Isaac Guilherme Araujo"

"Isaac Guilherme Araujo" den "Isaac Guilherme Araújo"

2) için. Örnekler: "das" "da" "dos" "do" "de" "e".

Carlos Eduardo Julio dos Santos

Carlos Eduardo dos Santos e Silva

Carlos Eduardo da Silva

3) Bu sorun yaşıyorum isim alanları ile çalışmak. Aşağıdaki kodla, ilk harfi büyük harfle uygulayabilirim, ancak diğerleri ben yapamadım. Sonra, sorun numarasına 2'ye göre, ben yazarsanız:

değeri girilir: " uglas yapmak de oliveira júnior"

olmalıdır: "Douglas de Oliveira Júnior"

olmamalı 't:' douglas de Oliveira Júnior ”.

function contains(str, search){ 
 
if(str.indexOf(search) >= 0){ 
 
    return true; 
 
} else { 
 
    return false; 
 
} 
 
} 
 

 
$.fn.capitalize = function(str) { 
 
    $.each(this, function() { 
 
     var split = this.value.split(' '); 
 
     for (var i = 0, len = split.length; i < len; i++) { 
 
      var verify = (split[len - 1] == "D" || split[len - 1] == "d") && (str == "e" || str == "E") || (str == "o" || str == "O"); 
 
      if (verify == false) { 
 
       if (contains(split[i], 'de') == false && contains(split[i], 'do') == false) { 
 
        split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1); 
 
       } 
 
      } 
 
     } 
 
     this.value = split.join(' '); 
 
    }); 
 
    return this; 
 
}; 
 

 
$(".capitalize").keypress(function(e) { 
 
    var str = String.fromCharCode(e.which); 
 
    $(this).capitalize(str); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label>Nome: </label> 
 
<input type="text" id="nome" name="nome" class="form-control input-sm capitalize">

Burada Stackoverflow üzerinde yeni bir üyesiyim ve ben hatalar için özür akım koduyla gösterilen // değer, ben javascript öğreniyorum. Teşekkür ederim!

+0

vb – epascarello

+1

o Tuşa basıldığında olmak zorunda mı? Sadece değişim üzerinde değere değiştirmek daha kolay olacaktır. Aynı zamanda şu an için daha pratik olur, imleci girişin ortasına yerleştiremez ve doğru şekilde düzenleyemezsiniz. –

+0

Bence şöyle olmalı: var str = String.fromCharCode (e.target.innerHtml); https://api.jquery.com/event.target/ – kangaro0

cevap

2

Bu çözüm, bağlantıların büyük harflerini carlos DE silva gibi büyük harflerle de giderir.
:)

var connectives = { 
 
    das: true, 
 
    da: true, 
 
    dos: true, 
 
    do: true, 
 
    de: true, 
 
    e: true 
 
}; 
 

 
function capitalize(str) { 
 
    return str 
 
     .split(" ") 
 
     .map(function(word) { 
 
      return !connectives[word.toLowerCase()] 
 
       ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() 
 
       : word.toLowerCase(); 
 
     }) 
 
     .join(" "); 
 
}; 
 

 
$(".capitalize").keyup(function() { 
 
    var cursorStart = this.selectionStart; 
 
    var cursorEnd = this.selectionEnd; 
 
    var capitalizedString = capitalize($(this).val()); 
 

 
    $(this).val(capitalizedString); 
 
    this.setSelectionRange(cursorStart, cursorEnd); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label>Nome: </label> 
 
<input type="text" id="nome" name="nome" class="form-control input-sm capitalize">

+0

Merhaba arkadaşım, katkı için teşekkürler! Bu çözüm ayrıca bağlantıları büyük harflerle de düzeltir, ancak problemi imleci girişin ortasına yerleştiremez ve doğru şekilde düzenleyemezsiniz. ama, teşekkürler :) –

+0

@PauloPitta Bir düzenleme yapıldı, şimdi çalışmalı. –

+0

Teşekkürler, şimdi çalışıyor! Kodunuzdan bunlara olan farkı söyleyebilir misiniz? https://stackoverflow.com/a/46122855/8577413 –

1

Beyaz listede bulunanlar dışındaki tüm kelimeleri büyük harfle biçimlendiren bir biçim işlevi kullanabilirsiniz. Kullanıcı bir tuşa bastığında (iyi çalışmıyor kullanıcı etrafında olsa giriş imleci hareket ederse) Sonra giriş değeri biçimlendirmek:

function format(string, noCapList=[]) { 
 
    const words = string.toLowerCase().split(' '); 
 
    return words.map((word) => { 
 
    if(!word.length || noCapList.includes(word)) { 
 
     return word; 
 
    } else { 
 
     return word[0].toUpperCase() + word.slice(1); 
 
    } 
 
    }).join(' '); 
 
} 
 

 
const input = document.querySelector('input'); 
 
input.addEventListener('keyup',() => { 
 
    input.value = format(input.value, ["das", "da", "dos", "do", "de", "e"]); 
 
});
<input/>
Bu sizin koduyla konuya benziyor

olduğunu girişi nasıl biçimlendiriyorsunuz? Soruyu anladığımdan% 100 emin değilim, ancak bu format fonksiyonu aradığınız çıktıyı sağlıyor.

+0

Merhaba arkadaşım, katkı için teşekkürler, javascript6 kullanmıyorum bahsetmeyi unuttum. Ama soru imleci girişin ortasına koyarak kullanıcı değiştiğinde. –

0

SimpleJ cevabı haklı, ancak orijinal bir yaklaşım netleştirmek için: "Sorun" contains işlevinde - aslında bu isim ve str yüzden contains('douglas', 'do') === truesearch içeriyorsa true döndürür için bu makaleye göre yapar; zaten ayrı ayrı sözcüklere bölünmüş string var, bu yüzden contains çağrıları yerine sadece split[i] !== "de" && split[i] !== "do" kullanın.

+0

Merhaba arkadaşım, katkı için teşekkür ederim –

0

altına snippet'iyle Deneyin ben bir cümle Çakma başlık hakkında FCC'deki algoritmayı gönderdiniz. Size yardımcı olabilirdi!

function titleCase(str) { 
    //First Converted to lowercase in case of test cases are tricky ones 
     var spl=str.toLowerCase(); 

     //Then Splitted in one word format as leaving one space as ' ' 
     spl = spl.split(' '); 

     for(var i=0;i<spl.length;i++){ 

     //Again Splitting done to split one letter from that respective word 
     var spl2= spl[i].split(''); 

     // In specific word's letter looping has to be done in order to 
     // convert 0th index character to uppercase 
     for(var j=0;j<spl2.length;j++){ 

     spl2[0]= spl2[0].toUpperCase(); 
     } 
     // Then Joined Those letters to form into word again 
     spl[i] = spl2.join(''); 
     } 
     // Then joined those words to form string 
     str = spl.join(' '); 
     return str; 
    } 

titleCase("sHoRt AnD sToUt"); 
+0

Merhaba arkadaşlar, katkı için teşekkürler, harfleri değiştirmek için kullandığınız mantığı anladım. Burada yükselmekte olduğumuz soru, kullanıcı herhangi bir tuşa bastığında doğrudan girdideki değişiklikle ilgilidir. Açıklama için teşekkürler! –

0

Görünüşe göre tatmin edici bir şey buldum. Kullanıcı imleci girişin ortasına yerleştirdiğinde bile çalışır. Ben burada bulundu: Link - Stackoverflow

Buradaki herhangi bir kişi, Doglas kullanıcısından bu kodla ilgili bir sorun olup olmadığını bana söyleyebilir mi?

farklı noktalarda imleci koyarak, delete tuşuna berbat edecek yazarken de genişlemiş

function ucfirst (str) { 
 
    // discuss at: http://locutus.io/php/ucfirst/ 
 
    str += ''; 
 
    var f = str.charAt(0).toUpperCase(); 
 
    return f + str.substr(1); 
 
} 
 

 
var not_capitalize = ['de', 'da', 'do', 'das', 'dos', 'e']; 
 
$.fn.maskOwnName = function(pos) { 
 
    $(this).keypress(function(e){ 
 
     if(e.altKey || e.ctrlKey) 
 
      return; 
 
     var new_char = String.fromCharCode(e.which).toLowerCase(); 
 
     
 
     if(/[a-zà-ú\.\, ]/.test(new_char) || e.keyCode == 8){ 
 
      var start = this.selectionStart, end = this.selectionEnd; 
 
     
 
     if(e.keyCode == 8){ 
 
      if(start == end) 
 
       start--; 
 

 
      new_char = ''; 
 
     } 
 
     
 
     var new_value = [this.value.slice(0, start), new_char, this.value.slice(end)].join(''); 
 
     var maxlength = this.getAttribute('maxlength'); 
 
     var words = new_value.split(' '); 
 
     start += new_char.length; 
 
     end = start; 
 

 
     if(maxlength === null || new_value.length <= maxlength) 
 
      e.preventDefault(); 
 
     else 
 
      return; 
 

 
     for (var i = 0; i < words.length; i++){ 
 
      words[i] = words[i].toLowerCase(); 
 

 
      if(not_capitalize.indexOf(words[i]) == -1) 
 
       words[i] = ucfirst(words[i]); 
 
     } 
 

 
     this.value = words.join(' '); 
 
     this.setSelectionRange(start, end); 
 
    } 
 
}); 
 

 
$.fn.maskLowerName = function(pos) { 
 
    $(this).css('text-transform', 'lowercase').bind('blur change', function(){ 
 
     this.value = this.value.toLowerCase(); 
 
    }); 
 
}; 
 

 
$.fn.maskUpperName = function(pos) { 
 
    $(this).css('text-transform', 'uppercase').bind('blur change', function(){ 
 
     this.value = this.value.toUpperCase(); 
 
    }); 
 
}; 
 

 
}; 
 

 
$('.capitalize').maskOwnName();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label>Nome: </label> 
 
<input type="text" id="nome" name="nome" class="form-control input-sm capitalize">

+0

jQuery, giriş etkinliğini ele alma işleminin etkinliğini mükemmelleştirirken önemli olayları kullanıyor. – zer00ne