Ответ 1
Просто используйте CSS.
.myclass
{
text-transform:capitalize;
}
Я ищу пример того, как заглавная буква первой строки строки вводится в текстовое поле. Обычно это выполняется во всем поле с функцией, регулярным выражением, OnBlur
, OnChange
и т.д. Я хочу использовать первую букву, пока пользователь все еще печатает.
Например, если я набираю слово "cat", пользователь должен нажать "c", а затем, пока он нажимает "a", C должен быть заглавным в поле.
Я думаю, что то, что я собираюсь, возможно с помощью keyup
или keypress
, но я не уверен, с чего начать.
У кого-нибудь есть пример для меня?
Просто используйте CSS.
.myclass
{
text-transform:capitalize;
}
Это просто преобразует вашу первую букву текста:
yourtext.substr(0,1).toUpperCase()+yourtext.substr(1);
Я ответил на это где-то еще. Однако, вот две функции, которые вы можете вызвать событие keyup.
Чтобы загладить первое слово
function ucfirst(str,force){
str=force ? str.toLowerCase() : str;
return str.replace(/(\b)([a-zA-Z])/,
function(firstLetter){
return firstLetter.toUpperCase();
});
}
И для использования всех слов
function ucwords(str,force){
str=force ? str.toLowerCase() : str;
return str.replace(/(\b)([a-zA-Z])/g,
function(firstLetter){
return firstLetter.toUpperCase();
});
}
Как @Даррелл предложил
$('input[type="text"]').keyup(function(evt){
// force: true to lower case all letter except first
var cp_value= ucfirst($(this).val(),true) ;
// to capitalize all words
//var cp_value= ucwords($(this).val(),true) ;
$(this).val(cp_value );
});
Надеюсь, что это будет полезно
Приветствия:)
$('input[type="text"]').keyup(function(evt){
var txt = $(this).val();
// Regex taken from php.js (http://phpjs.org/functions/ucwords:569)
$(this).val(txt.replace(/^(.)|\s(.)/g, function($1){ return $1.toUpperCase( ); }));
});
CSS-решение с "text-transform: capitalize;" нехорошо, если вы хотите использовать содержимое входа в бэкэнд. Вы все равно будете получать данные как есть. JavaScript решает эту проблему.
Плагин JQuery, объединенный с некоторыми из упомянутых выше методов, плюс он заглаживает слова после дефисов, т.е.: "Tro Lo-Lo":
Добавьте к своему script:
jQuery.fn.capitalize = function() {
$(this[0]).keyup(function(event) {
var box = event.target;
var txt = $(this).val();
var stringStart = box.selectionStart;
var stringEnd = box.selectionEnd;
$(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($word) {
return $word.toUpperCase();
}));
box.setSelectionRange(stringStart , stringEnd);
});
return this;
}
Затем просто присоедините capizeize() к любому селектору:
$('#myform input').capitalize();
Я использовал код @Spajus и написал более расширенный плагин jQuery.
Я написал эти четыре функции jQuery:
upperFirstAll()
, чтобы использовать все слова во входном полеupperFirst()
, чтобы использовать только первое словоupperCase()
, чтобы преобразовать текст отверстия в верхний регистрlowerCase()
, чтобы преобразовать текст отверстия в нижний регистрВы можете использовать и связывать их, как и любую другую функцию jQuery: $('#firstname').upperFirstAll()
Мой полный плагин jQuery:
(function ($) {
$.fn.extend({
// With every keystroke capitalize first letter of ALL words in the text
upperFirstAll: function() {
$(this).keyup(function(event) {
var box = event.target;
var txt = $(this).val();
var start = box.selectionStart;
var end = box.selectionEnd;
$(this).val(txt.toLowerCase().replace(/^(.)|(\s|\-)(.)/g,
function(c) {
return c.toUpperCase();
}));
box.setSelectionRange(start, end);
});
return this;
},
// With every keystroke capitalize first letter of the FIRST word in the text
upperFirst: function() {
$(this).keyup(function(event) {
var box = event.target;
var txt = $(this).val();
var start = box.selectionStart;
var end = box.selectionEnd;
$(this).val(txt.toLowerCase().replace(/^(.)/g,
function(c) {
return c.toUpperCase();
}));
box.setSelectionRange(start, end);
});
return this;
},
// Converts with every keystroke the hole text to lowercase
lowerCase: function() {
$(this).keyup(function(event) {
var box = event.target;
var txt = $(this).val();
var start = box.selectionStart;
var end = box.selectionEnd;
$(this).val(txt.toLowerCase());
box.setSelectionRange(start, end);
});
return this;
},
// Converts with every keystroke the hole text to uppercase
upperCase: function() {
$(this).keyup(function(event) {
var box = event.target;
var txt = $(this).val();
var start = box.selectionStart;
var end = box.selectionEnd;
$(this).val(txt.toUpperCase());
box.setSelectionRange(start, end);
});
return this;
}
});
}(jQuery));
Groetjes:)
Мой личный фаворит при использовании jQuery короткий и сладкий:
function capitalize(word) {
return $.camelCase("-" + word);
}
Там тоже есть плагин jQuery. Я назову это... jCap.js
$.fn.extend($, {
capitalize: function() {
return $.camelCase("-"+arguments[0]);
}
});
$("#test").keyup(
function () {
this.value = this.value.substr(0, 1).toUpperCase() + this.value.substr(1).toLowerCase();
}
);
Незначительное обновление кода выше, чтобы заставить строку опуститься до того, как загладить первую букву.
(Оба используют синтаксис Jquery)
function CapitaliseFirstLetter(elemId) {
var txt = $("#" + elemId).val().toLowerCase();
$("#" + elemId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
return $1.toUpperCase(); }));
}
Кроме того, функция "Заглавная строка" WHOLE:
function CapitaliseAllText(elemId) {
var txt = $("#" + elemId).val();
$("#" + elemId).val(txt.toUpperCase());
}
Синтаксис для использования при событии кликов текстового поля:
onClick="CapitaliseFirstLetter('myTextboxId'); return false"
Мои пристрастия. Синтаксис был отключен из-за того, что я спешил и неряшлив. Здесь вы идете...
$('#tester').live("keyup", function (evt)
{
var txt = $(this).val();
txt = txt.substring(0, 1).toUpperCase() + txt.substring(1);
$(this).val(txt);
});
Простой, но работает. Вы бы не захотели сделать это более общим, подключи и играбельным. Это просто предложить другую идею, с меньшим количеством кода. Моя философия с кодированием делает ее максимально общей и с меньшим количеством кода.
Надеюсь, это поможет. Счастливое кодирование!:)
Это очень здорово, что вы можете использовать только первую букву поля ввода. С этим. Если кто-нибудь знает, как заглавные буквы. Как CSS text-transform: capize, Please Reply.. Здесь вы идете..
$('input-field').keyup(function(event) {
$(this).val(($(this).val().substr(0,1).toUpperCase())+($(this).val().substr(1)));
});
Турецкий. Если кому-то все еще интересно.
$('input[type="text"]').keyup(function() {
$(this).val($(this).val().replace(/^([a-zA-Z\s\ö\ç\ş\ı\i\ğ\ü\Ö\Ç\Ş\İ\Ğ\Ü])|\s+([a-zA-Z\s\ö\ç\ş\ı\i\ğ\ü\Ö\Ç\Ş\İ\Ğ\Ü])/g, function ($1) {
if ($1 == "i")
return "İ";
else if ($1 == " i")
return " İ";
return $1.toUpperCase();
}));
});
это поможет вам преобразовать первую букву каждого слова в верхний регистр.
<script>
/* convert First Letter UpperCase */
$('#txtField').on('keyup', function (e) {
var txt = $(this).val();
$(this).val(txt.replace(/^(.)|\s(.)/g, function ($1) {
return $1.toUpperCase( );
}));
});
</script>
Пример: это предложение для случая с заголовком → This Is A Name Case Sentence
Решение, принимающее исключения (переданные параметрами):
Скопируйте приведенный ниже код и используйте его следующим образом: $('myselector'). maskOwnName (['of', 'on', 'a', 'as', 'at', 'for', 'in', 'to']);
(function($) {
$.fn.teste = function(not_capitalize) {
not_capitalize = !(not_capitalize instanceof Array)? []: not_capitalize;
$(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] = PHP.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();
});
}
})(jQuery);
С Javascript вы можете использовать:
yourtext.substr(0,1).toUpperCase()+yourtext.substr(1);
Если вы создаете свою веб-страницу случайно PHP, вы также можете использовать:
<?=ucfirst($your_text)?>
.first-character{
font-weight:bold;
color:#F00;
text-transform:capitalize;
}
.capital-text{
text-transform:uppercase;
}
Jquery или Javascipt не обеспечивают встроенный метод для достижения этого.
Преобразование теста CSS (text-transform:capitalize;
) на самом деле не капитализирует строковые данные, а показывает заглавную визуализацию на экране.
Если вы ищете более законный способ для достижения этого на уровне данных с помощью простого vanillaJS, используйте это решение = >
var capitalizeString = function (word) {
word = word.toLowerCase();
if (word.indexOf(" ") != -1) { // passed param contains 1 + words
word = word.replace(/\s/g, "--");
var result = $.camelCase("-" + word);
return result.replace(/-/g, " ");
} else {
return $.camelCase("-" + word);
}
}
При достижении этого я использую решения CSS и jQuery. Это изменит как внешний вид в браузере, так и значение данных. Простое решение, которое просто работает.
CSS
#field {
text-transform: capitalize;
}
JQuery
$('#field').keyup(function() {
var caps = jQuery('#field').val();
caps = caps.charAt(0).toUpperCase() + caps.slice(1);
jQuery('#field').val(caps);
});
Моя попытка.
Действует только в том случае, если весь текст в нижнем регистре или весь в верхнем регистре, использует преобразование регистра Locale. Попытки уважать преднамеренную разницу регистра или "или" в именах. Бывает на Blur, чтобы не вызывать раздражений на телефонах. Хотя оставлено в начале/конце выделения, поэтому, если оно изменено на keyup, оно может быть полезным. Должен работать на телефонах, но не пытался.
$.fn.capitalize = function() {
$(this).blur(function(event) {
var box = event.target;
var txt = $(this).val();
var lc = txt.toLocaleLowerCase();
var startingWithLowerCaseLetterRegex = new RegExp("\b([a-z])", "g");
if (!/([-'"])/.test(txt) && txt === lc || txt === txt.toLocaleUpperCase()) {
var stringStart = box.selectionStart;
var stringEnd = box.selectionEnd;
$(this).val(lc.replace(startingWithLowerCaseLetterRegex, function(c) { return c.toLocaleUpperCase() }).trim());
box.setSelectionRange(stringStart, stringEnd);
}
});
return this;
}
// Usage:
$('input[type=text].capitalize').capitalize();
Небольшое обновление для решения cumul.
Функция upperFirstAll не работает должным образом, если между словами имеется более одного пробела. Замените для этого регулярное выражение:
$(this).val(txt.toLowerCase().replace(/^(.)|(\s|\-)+(.)/g,