2015-05-28 2 views
2

У меня есть требование, чтобы во входном текстовом поле на каждое введенное значение должно было произойти, а после ввода 6-го символа должен быть добавлен дефис к строке.Jquery keypress, keydown, keyup, вход не подходит моему требованию

Решения, которые я пытался и проблемы, с которыми я столкнулся, перечислены ниже:

  1. KeyUp - Это прекрасно работает для обнаружения каждого введенного символа и добавление дефиса кроме того, что «он будет посылать только один ключ запись для длинного нажатия клавиши ". Пример: если я продолжаю долгое нажатие «9», значение в текстовом поле будет «999999999999», но событие keyup запускается только один раз.

  2. keypress - он отлично работает для обнаружения каждого введенного символа и добавления дефиса, за исключением того, что «событие нажатия клавиши не вызывается в обратном пространстве». Пример: если я вхожу в backspace, у меня есть функция проверки правильности поля и удаления дефиса.

  3. keydown - Я не получаю точное значение тока для каждой клавиши. Пример: если я ввожу «9» в поле, в событии keydown, я получаю только «» в качестве текущего значения. И я набираю «99», я получаю «9» в качестве значения поля. Из-за того, что при событии keydown значение не будет обновляться в поле.

  4. вход - все работает нормально, за исключением того, что я не могу получить код ключа внутри этой функции. (Без которого я не могу обнаружить обратное пространство).

Итак, что должно быть сделано для того, чтобы

  1. работы с длинными нажатиями клавиш,
  2. обнаружения Backspace,
  3. текущее значение обновляется при нажатии клавиши,

работа в то же время.

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

+0

насчет '.На ('изменения', функция() {})'? –

+0

Задерживает keydown решение для вашего случая использования: http://jsfiddle.net/whfppw0q/? –

+0

Спасибо @ DarrenSweeney. Но функция «change» запускается только с размытием ввода. –

ответ

0

У меня этот же вопрос и исправить его, добавив эти две функции:

$('#YourId').keydown(function() { 
    yourFunction(); 
}).keyup(function() { 
    yourFunction(); 
}); 
0

Если вам просто нужно сделать это один раз, как в первый раз шестой символ вводится и не каждый 6 вы можете сделать что-то как это:

https://jsfiddle.net/zx7snsos/

$('input').on('keyup', function(e){ 
    var str=$('input').val(); 
    if(str.length>6&&str.indexOf('-')!=6) 
     str=str.slice(0,6)+'-'+str.slice(6); 
    else if(str.length==6) 
     str+='-'; 
    $('input').val(str); 
}); 
Смежные вопросы