проблема с заглавными буквами - PullRequest
2 голосов
/ 09 января 2010

Я хотел бы иметь ввод, который будет изменяться на верхний регистр при keyup. Поэтому я прикрепляю простое событие на keyup.

HTML

<input id="test"/>

Javascript (с jQuery)

$("#test").keyup(function(){
  this.value = this.value.toUpperCase();
});

Но я обнаружил, что в Chrome и IE, когда вы нажимаете стрелку влево, курсор автоматически перемещается в конец. Я заметил, что должен определить, является ли ввод только буквой. Должен ли я использовать диапазон кодов или регулярное выражение для обнаружения?

Пример: http://jsbin.com/omope3

Ответы [ 7 ]

5 голосов
/ 09 января 2010

Или вы можете использовать следующее (это, вероятно, быстрее и элегантнее):

<input style="text-transform: uppercase" type='text'></input>

Но это отправляет введенное значение обратно в данные формы, поэтому используйте одно из следующего, чтобы сохранить его как все прописные в базе данных:

MySQL: UPPER(str)

PHP: strtoupper()

3 голосов
/ 13 октября 2010

Другое решение, если вы используете text-transform: uppercase; css свойство:

<input id='test' style='text-transform: uppercase;' type='text'></input>

А с помощью jQuery вы можете выбрать событие размытия :

$("#test").blur(function(){
  this.value = this.value.toUpperCase();
});

С этим решением вам не нужно поднимать верхнюю часть полей базы данных, вы можете использовать курсор для перемещения, а пользователь может вставлять / переписывать текст в поле ввода.

2 голосов
/ 24 января 2012

Используйте это:

<input onkeyup="MakeMeUpper(this)" type="text"/>

А в вашей JS Code Part введите:

function MakeMeUpper(f, e){ 
  var actualValue = f.value;        
  var upperValue = f.value.toUpperCase();
  if( actValue != upperValue){
    f.value = upperValue;       
  }   
}

Этот код не изменит текст, если пользователь ввел что-то не текстовое (стрелка влево или вправо).

1 голос
/ 09 января 2010

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

$("#test").keyup(function(){
  var upper = this.value.toUpperCase();
  if (this.value != upper) 
      this.value = upper;
});

, который изменит значение только в том случае, если его необходимо изменить. Однако это все еще оставляет проблему с тем, что если вы наберете abd, переместитесь влево, нажмите c, чтобы получить abcd, курсор все равно будет перемещен в конец.

0 голосов
/ 03 марта 2015
var str = $(this).val();
if (evt.keyCode != 37 && evt.keyCode != 39)
{
    str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
        return letter.toUpperCase();
    });
    $(this).val(str);
}
0 голосов
/ 12 января 2012

Javascript (с jQuery)

$("#test").keyup(function(){
  $(this).val($(this).val().toUpperCase());
});
0 голосов
/ 09 января 2010

Вы, вероятно, хотите посмотреть на keyCode в вашей функции keyup.

var UP_ARROW = 38,
    DOWN_ARROW = 40;

$('#test').keyup(function(evt){
    if (evt.keyCode == UP_ARROW)
    {
        this.value = this.value.toUpperCase();
    }

    if (evt.keyCode == DOWN_ARROW)
    {
        this.value = this.value.toLowerCase();
    }
});
...