Как вы автоматически устанавливаете текстовое поле в верхний регистр?


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
Будущие читатели, которые хотят, чтобы изменения были внесены по стоимости, а не чисто визуально, см . Ответ Бурака Токака .
— Dinei

59

Я думаю, что наиболее надежным решением, которое обеспечит его публикацию в верхнем регистре, является использование встроенного метода oninput, например:

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

РЕДАКТИРОВАТЬ

Некоторые люди жаловались, что курсор перескакивает в конец при редактировании значения, поэтому эта слегка расширенная версия должна решить эту проблему.

<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обходного пути.
— Dinei

1
Это работает, но как избежать уродливого перехода от второго нижнего регистра к верхнему?
— Джонатан Сафа

7
Следуя идее "события ввода", добавление этого атрибута к inputэлементу, кажется, работает хорошо:oninput="this.value = this.value.toUpperCase()"
— Томми Стэнтон,

3
@JonathanSafa Используйте это в дополнение к text-transform:uppercaseрешению стиля css выше, чтобы ввод всегда отображался в верхнем регистре
— miknik

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

Это покажет ввод в верхнем регистре и отправит входные данные через post в верхнем регистре.

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.