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


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.