2014-12-18 2 views
-1

Я написал следующий код для проверки текстового поля с числами с двумя цифрами после десятичного кода, но он не работает в firefox , он блокирует все ключи после того, как мы набрали две цифры после десятичной. Экзамены: если я типа 123.45, я не могу выполнить какое-либо другое событие, в котором текстовое поле действует так, как будто оно отключено.Код проверки числового текстового поля Firefox не работает

JavaScript:

функция noAlphabets (событие) {

var charCode = (event.which) ? event.which : event.keyCode 
if (charCode == 188) { 
    return true; 
} 
//Compatible with IE8 & other browser 
var obj = event.currentTarget ? event.currentTarget : event.srcElement; 
var newvalue = $(obj).val(); 
alert(newvalue);// $(event.currentTarget).val(); 
//if (newvalue.indexOf(".") >= 0) { 
// if (newvalue.substr(newvalue.indexOf(".") + 1, (newvalue.length - 1)).length >= 2) 
// { return false; } 
//} 
if ((charCode != 46 && charCode > 31 
     && (charCode < 48 || charCode > 57)) 
     || (charCode == 46 && $(obj).val().indexOf(".") != -1)) 
    return false; 

return true; 

}

MVC код вид:

@ Html.TextBoxFor (модель => model.FolioList [I] (Объект) new {disabled = "disabled", @onkeypress = "return noAlphabets() мероприятие);" })

ответ

0

Я предполагаю, что вы хотите сделать так, чтобы вы могли изменить значение поля (т. используйте backspace для удаления ввода и сможете ввести новое значение). Имея это в виду, вот решение, которое я разработал. Это проверяет, существует ли период в поле, а затем проверяет, не превышает ли длина подстроки после периода больше 2. Если оно больше 2, а ключевой код последнего нажатия клавиши не является обратным, то предотвратите это нажатие клавиши. Второй оператор if проверяет, не является ли ключ числом, обратным пространством или периодом. Если это не какой-либо из них, то запретите нажатия клавиш.

$("#validate").keydown(function(e){ 
    var pressedKey = (e.which || e.keycode); 
    if (e.target.value.indexOf('.') > -1 && e.target.value.substr(e.target.value.indexOf('.')).length > 2 && pressedKey != 8) { 
     e.preventDefault(); 
    } 
    if (((pressedKey < 48 || pressedKey > 57) && (pressedKey < 96 || pressedKey > 105)) && pressedKey != 8 && pressedKey != 190) { 
     e.preventDefault(); 
    } 
}); 

http://jsfiddle.net/IronFlare/7xpLhhxa/1/

+0

Сценарий принимать более двух значений после Decima, а также несколько знаков после запятой. а также не работает в firefox. –

+0

Итак, если я правильно понимаю это, вы ищете его, чтобы просто установить переменную (т.е. что-то вернет true), если между каждым периодом или между периодом и концом ввода не должно быть двух символов , Это верно? – IronFlare

+0

@NIMESHJAIN Это очень поздний ответ, но я просто перечитаю ваш комментарий, и я думаю, что теперь понимаю, что вы имели в виду. Я создал исходный прототип старого браузера, который не понимал тип ввода «Число». В результате скрипт работал правильно там, а не когда он запускался в обновленном браузере. Я изменил тип ввода на «Текст» и устранил проблему ([JSFiddle] (http://jsfiddle.net/7xpLhhxa/3/)). Не стесняйтесь, дайте мне знать, если это работает, или если это не то, что вы ищете. – IronFlare

Смежные вопросы