2012-02-17 6 views
1

В форме есть текстовое поле, в котором разрешены только определенные входные номера. i.eМаска ввода в javascript/jquery

0.5, 1, 1.5, 2, 2.5, 3........ and so on 

Как я могу замаскировать это текстовое поле для этих входов? Или какое регулярное выражение мне следует использовать?

ответ

1

Если вы хотите проверить на отправить, вы можете просто использовать parseFloat, Math.floor и toString:

function isValidValue(text) { 
    return text == (Math.floor(parseFloat(text) * 2)/2).toString(); 
} 

Или вы можете выполнить проверку регулярного выражения со строкой замены, .replace(/[^0-9\.]/g, ""). Это позволяет только числа и периоды/десятичные точки. К сожалению, это не мешает нескольким десятичным точкам.

Если вы хотите ограничить фактические нажатия клавиш, вам нужно что-то еще. Прикрепите следующую функцию к событию keyup для вашего текстового поля. Не забывайте использовать return isValidKey(this, event) вместо того, чтобы просто isValidKey(this, event):

function isValidKey(me, evt) { 

    var charCode = (evt.which) ? evt.which : event.keyCode; 
    var currValue = me.value; 

    // disallow decimal point if it is not the first one 
    if ((charCode == 46 || charCode == 110 || charCode == 190) && currValue.indexOf(".") != -1) 
     return false; 

    // disallow non numeric characters 
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) 
     return false; 

    return true; 
} 

http://jsfiddle.net/SHJsz/

Update: Теперь немного более строгим, но до сих пор не является надежным. Вы все равно можете иметь число с ведущим 0 или начинать с десятичной точки, если пользователь использует backspace или delete для удаления исходных стартовых номеров.

http://jsfiddle.net/SHJsz/1/

+0

Спасибо, это работает для меня .. :) –

0

Вы можете посмотреть здесь:

http://digitalbush.com/projects/masked-input-plugin/

но не в полной мере решить проблему, просто позволяет маску, а не предопределенные значения. Вы можете изменить код плагина, хотя и для своих нужд.

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