Сначала разместите обработчики событий в блоке document.ready. Затем, вместо изменения для события в текстовом поле, используйте keypress. Наконец, похоже, что шаблон предотвращает получение правильного значения. Одно решение, которое, безусловно, работать, чтобы написать свой собственный обработчик событий для проверки нажатий клавиш:
$("document").ready(function(){
var regExPattern = "[0-9]+([\.|,][0-9]+)?"; //You will have to troubleshoot this
$("#numberinput").keypress(function(e){
if (!regExPattern.test($("#numberinput").val() + e.val()){
e.preventDefault();
return false;
}
else
$("#out").text($("#numberinput").val() + e.val());
});
});
Этот код не тестировался, но должен работать. Надеюсь, у кого-то будет лучший способ, но я думаю, что эта модель - вот ваша проблема. Я никогда не видел, чтобы контроль не позволял вам восстановить его значение раньше.
UPDATE:
Вот пример функции MaskDecimal:
function MaskDecimal(e) {
var CurrentValue = $(this).val();
var dotkey = [190, 46]; // try to catch inconsistent key mapping
var commakey = [188, 44]; // see: http://unixpapa.com/js/key.html
if (dotkey.indexOf(e.which) > -1 || commakey.indexOf(e.which) > -1) {
if (CurrentValue.indexOf(".") > -1) {
e.preventDefault();
return false;
}
else if (CurrentValue == "") {
$(this).val("0.");
e.preventDefault();
return false;
}
else if(commakey.indexOf(e.which) > -1){
$(this).val(CurrentValue +'.');
e.preventDefault();
return false;
}
}
// allow only digits, backspace and enter:
else if ((e.which < 48 || e.which > 57) && !(e.keyCode == 8 || e.keyCode == 13)) {
e.preventDefault();
return false;
}
}
http://jsfiddle.net/p0rdhnew/4/
Вы бы присвоить этот MaskDecimal вашим текстовые поля следующим образом:
$("#numberinput").on("keypress", MaskDecimal);
Дон забыть чтобы ссылаться на ваш JS-файл на вашей странице, если вы добавили свою функцию MaskDecimal!
Это это хороший вопрос. Я не вижу никаких оснований для голосования. Я могу только предположить, что тот, кто это сделал, не совсем понял вопрос. – andlrc
Просто воспроизводится в этом: 'a = document.createElement ('input'); a.type = 'number'; a.setAttribute ('value', 'a'); a.value; // "" ' – andlrc
Я тестировал его на Chromium и Firefox, последние версии – abimelex