Як автоматично встановити текстове поле у ​​верхньому регістрі?


131

Я використовую наступний атрибут стилю, щоб встановити введення користувачем великого регістру, щоб, наприклад, коли він почав набирати текст у текстовому полі railway, його слід змінити на великі літери, як, наприклад, RAILWAY без необхідності натискання кнопки Caps-lock.

Це код, який я використовую для введення:

<input type = "text" class = "normal" name = "Name" size = "20" maxlength = "20"> <img src="../images/tickmark.gif" border="0" style='text-transform:uppercase'/>

Але я не отримую бажаного результату, використовуючи цей атрибут.


2
Як було сказано нижче, будьте обережні, пробіли між = і значеннями "текст"
Джонатан Сафа

Відповіді:


261

Ви помістили styleатрибут у <img>тег замість <input>.

Також не годиться мати пробіли між назвою атрибута та значенням ...

<input type="text" class="normal" 
       name="Name" size="20" maxlength="20" 
       style="text-transform:uppercase" /> 
<img src="../images/tickmark.gif" border="0" />

Зверніть увагу, що ця трансформація є чисто візуальною і не змінює текст, який надсилається в POST.


67
Зауважте, що якщо ви надсилаєте ці дані через POST, вони надсилатимуть їх, як тільки ви їх ввели, а не як вони відображаються на екрані.
Вінсент Поарьє

@freefaller, він змінив весь вхід у верхній регістр, але вставлення в mysql - це малий текст, як змінити велику літеру!
Девід Жау Хпан

6
@David, дивіться попередній коментар. Перетворення суто візуальне. Це не змінює регістр основного тексту, який надсилається назад на сервер. Якщо ви хочете зберегти текст у верхньому регістрі, перед його збереженням слід перетворити його на сервер
freefaller

7
Це не повне рішення, оскільки заповнювач місця тепер є великим регістром (чого в більшості випадків не повинно бути). Немає іншого способу, як використовувати JavaScript.
tomericco

1
Майбутні читачі, які хочуть, щоб зміни були цінні, а не чисто візуальними, дивіться відповідь Бурака Токака .
Діней

58

Я думаю, що найбільш надійним рішенням, яке гарантуватиме, що воно розміщено у великих літерах, є використання методу oninput inline на зразок:

<input oninput="this.value = this.value.toUpperCase()" />

EDIT

Деякі люди скаржаться, що курсор під час редагування значення стрибає до кінця, тому ця трохи розширена версія повинна вирішити це

<input oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" />


36

Відповіді зі text-transformation:uppercaseстилем не надсилатимуть великі дані на сервер після надсилання - те, що ви можете очікувати. Ви можете зробити щось подібне замість цього:

Для введення HTML використовуйте onkeydown:

<input name="yourInput" onkeydown="upperCaseF(this)"/>

У вашому JavaScript:

function upperCaseF(a){
    setTimeout(function(){
        a.value = a.value.toUpperCase();
    }, 1);
}

Завдяки upperCaseF()функціонуванню на кожному натисканні клавіші значення вводу перетвориться на верхню велику форму.

Я також додав затримку 1 мс, щоб блок функцій коду спрацьовував після того, як відбулася подія клавіші.


4
Можна було б використовувати на inputподію замість keydownі позбутися від setTimeoutобхідного шляху.
Діней

1
Це працює, але як же уникнути некрасивого розколу другого нижнього регістру до великого стрибка?
Джонатан Сафа

7
З ідеєю "події введення", додавання цього атрибуту до inputелементу, здається, працює добре:oninput="this.value = this.value.toUpperCase()"
Tommy Stanton

3
@JonathanSafa Використовуйте це на додаток до text-transform:uppercaseрішення стилю css вище, щоб введення завжди виглядало як великі
регістри

1
Коли користувач редагує наявний текст і кладе курсор кудись, крім кінця, курсор буде переходити до кінця з кожним набраним символом. Чи є спосіб зберегти положення курсору, а також перетворити текст у великі регістри?
Майк Водарчик

17

Проблема з першою відповіддю полягає в тому, що заповнювач заповнення також буде великим регістром. Якщо ви хочете, щоб ТІЛЬКИ вхід був великим, використовуйте наступне рішення.

Для того, щоб вибрати лише не порожній вхідний елемент, поставте необхідний атрибут на елемент:

<input type="text" id="name-input" placeholder="Enter symbol" required="required" />

Тепер, щоб вибрати його, використовуйте :validпсевдоелемент:

#name-input:valid { text-transform: uppercase; }

Таким чином ви будете реєструвати лише великі літери


4
Ця відповідь не працює і не має сенсу. Чому виділення може впливати лише на текст введення, а не на заповнювач? Я думаю, якщо пустий не був дійсним значенням, то це може спрацювати випадково. Тут я використав відповідь: stackoverflow.com/questions/25180140/…
Бен Терлі

6
Моє рішення чудово працює лише для необхідних полів для введення тексту. Якщо спробувати узагальнити, це не вийде. Він відповідає на запитання вище. Ви, мабуть, задаєте інше запитання.
tomericco

Це дійсно корисне рішення, і саме те, що мені було потрібно. Він не підходить до кожної ситуації, оскільки це залежить від необхідного поля, але це, безумовно, зручно мати в панелі інструментів!
Тім Маккі

9

спробуйте

<input type="text" class="normal" 
       style="text-transform:uppercase" 
       name="Name" size="20" maxlength="20"> 
 <img src="../images/tickmark.gif" border="0"/>

Замість зображення поставте тег стилю на введення, оскільки ви пишете на вводі, а не на зображенні


4
Однак це також робить верхній регістр тексту заповнювача.
Казим Заїді

5

Встановіть наступний стиль, щоб встановити всі текстові поля в регістр

input {text-transform: uppercase;}

3

Проблема стилю CSS полягає в тому, що він не змінює дані, і якщо ви не хочете мати функцію JS, то спробуйте ...

<input onkeyup="this.value = this.value.toUpperCase()" />

самостійно ви побачите поле з великої літери на клавіші, тому, можливо, буде бажано поєднати це з style='text-transform:uppercase' іншими запропонованими.


2

Використання CSS text-transform: uppercaseне змінює фактичний вхід, а лише змінює його вигляд. Якщо ви надсилаєте вхідні дані на сервер, він все одно буде переноситись на малі регістри або все-таки ви їх ввели. Щоб фактично трансформувати вхідне значення, потрібно додати код JavaScript, як показано нижче:

document.querySelector("input").addEventListener("input", function(event) {
  event.target.value = event.target.value.toLocaleUpperCase()
})
<input>

Тут я використовую toLocaleUpperCase()для перетворенняinput значення у великі регістри. Це добре працює, поки вам не потрібно буде редагувати те, що ви ввели, наприклад, якщо ви ввели ABCXYZ і тепер ви намагаєтесь змінити його на ABCLMNXYZ, він стане ABCLXYZMN, оскільки після кожного введення курсор стрибає до кінця.

Щоб подолати цей стрибок курсору, ми повинні внести такі зміни у свою функцію:

document.querySelector("input").addEventListener("input", function(event) {
  var input = event.target;
  var start = input.selectionStart;
  var end = input.selectionEnd;
  input.value = input.value.toLocaleUpperCase();
  input.setSelectionRange(start, end);
})
<input>

Зараз усе працює як очікувалося, але якщо у вас повільний ПК, під час введення тексту, ви можете побачити текст, який переходить з малих літер у великі регістри. Якщо це вас дратує, настав час використовувати CSS, застосуйте input: {text-transform: uppercase;}до файлу CSS, і все буде добре.


1

Це буде відображати вхідні великі регістри та надсилати вхідні дані через публікацію у великому регістрі.

HTML

<input type="text" id="someInput">

JavaScript

var someInput = document.querySelector('#someInput');
someInput.addEventListener('input', function () {
    someInput.value = someInput.value.toUpperCase();
});

0

Як ніхто не пропонував цього:

Якщо ви хочете використовувати CSS-рішення із малими заповнювачами, вам просто потрібно стилізувати заповнювачі окремо. Розділіть 2 стилі заповнювачів для сумісності з IE.

input {
    text-transform: uppercase;
}
input:-ms-input-placeholder {
    text-transform: none;
}
input::placeholder {
    text-transform: none;
}
The below input has lowercase characters, but all typed characters are CSS-uppercased :<br/>
<input type="text" placeholder="ex : ABC" />


0

Спробуйте нижче рішення. Це також допоможе, коли користувач вводить лише порожнє місце у полі введення при першому індексі.

document.getElementById('capitalizeInput').addEventListener("keyup",   () => {
  var inputValue = document.getElementById('capitalizeInput')['value']; 
  if (inputValue[0] === ' ') {
      inputValue = '';
    } else if (inputValue) {
      inputValue = inputValue[0].toUpperCase() + inputValue.slice(1);
    }
document.getElementById('capitalizeInput')['value'] = inputValue;
});
<input type="text" id="capitalizeInput" autocomplete="off" />


-2
<script type="text/javascript">
    function upperCaseF(a){
    setTimeout(function(){
        a.value = a.value.toUpperCase();
    }, 1);
}
</script>

<input type="text" required="" name="partno" class="form-control" placeholder="Enter a Part No*" onkeydown="upperCaseF(this)">

4
Як ця відповідь відрізняє від усіх вже даних?
Козеріг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.