В то время как ввод текста во входной строке Первая буква должна измениться на "Капитал", но буквы отдыха должны быть в нижнем регистре, даже пользовательские заглавные буквы должны изменить его в нижнем регистре.
Пример ввода слова: mOuSe, ComPuTER
Важный момент: при вводе текста он должен измениться на: мышь, компьютер
Я пробовал много решений Stackflow, но для выше логики я не нашел ни одного.
Использование Css: Нажмите здесь
Использование Javacript: Нажмите здесь (этот работал, но для последнего письма он не работает)
Любое решение принимается с использованием JQuery, Javascript или Css
$(document).ready(function() {
//alert('ready');
$('input').on('keypress', function(event) {
var $this = $(this),
val = $this.val();
val = val.substr(0, 1).toUpperCase() + val.substr(1).toLowerCase();
$this.val(val);
});
});
Используйте событие input
вместо события keypress
.
$('input').on('input', function(event) {
keyup
событие лучше
keyup
не сработает, если пользователь вставит в поле
Может показаться интересным отметить, что CSS text-transform: capitalize;
только изменяет отображение ввода, а Javascript изменяет фактическое значение HTML. Это имеет значение, если вход представляет собой, например, поле ввода CAPTCHA или поле ввода формы, которое должно быть проверено.
С чистым Javascript вы можете разделить вход на отдельные слова и преобразовать каждый из них, например:
HTML
<div id="transform">mOuSE, cOmPUTEr</div>
<button type="button">Capitalize</button>
JS
var rgx = /,/; /* word splitter, can be anything */
var target = document.getElementById('transform');
document.getElementsByTagName('button')[0].onclick = function() {
var strArr = target.innerHTML.split(rgx); /* split the input */
for (var word = 0; word < strArr.length; word++) { /* iterate over each word */
strArr[word] = strArr[word].toLowerCase().trim();
var firstLetter = strArr[word].substr(0,1).toUpperCase();
var otherLetters = strArr[word].substr(1, strArr[word].length)
strArr[word] = firstLetter+otherLetters;
}
target.innerHTML = strArr.join();
}
Демо: http://jsbin.com/farib/2/edit
NB: Если ваш вход находится в <textarea>
или <input>
, замените .innerHTML
на .value
.
function initCap(t){
t.value=t.value.toLowerCase();
t.style='text-transform:capitalize;'
}
вызовите метод onkeypress и onblur
Попробуй это
$('input').on('keyup', function(event) {
var firstchar = $(this).val().substring(0,1);
var remainchar = $(this).val().substring(1,$(this).val().length).toLowerCase();
$(this).val(firstchar + remainchar);
});
$('input').on('keydown', function(event) {
var firstchar = $(this).val().substring(0,1);
var remainchar = $(this).val().substring(1,$(this).val().length).toLowerCase();
$(this).val(firstchar + remainchar);
});
Попробуйте это решение css.
input {
text-transform:capitalize;
color: blue;
}
$(document).ready(function(){
$("input").on("keypress",function(){
$(this).val($(this).val().toLowerCase());
});
})