2014-12-16 2 views
3

У меня есть поле ввода номера типа. Для этого требуется число, равное 21,5 или 0,1, но оно не соответствует 21,5 или 0,1 . Мне все равно, что я занимаюсь сексером, поскольку я обрабатываю его в php, но я не могу отправить его с помощью Ajax, поскольку он не является Валида. Но мне нравится держать тип = «число», чтобы заставить mobiledevices отображать num-pad. Так что я подумал, что должно быть довольно просто заменить запятую точкой перед ее отправкой. Но для этого мне нужно получить значение входного поля.Получить значение jQuery из неопределяемого поля ввода

Есть ли способ получить значение, даже если оно не проверяется?

<input type="number" pattern="[0-9]+([\.|,][0-9]+)?" min=0 step=0.1 id="numberinput" title="test"/> 

http://jsfiddle.net/p0rdhnew/

document.getElementById('numberinput').value и $('#numberinput').val() не работает, смотрите пример в скрипке.

+0

Это это хороший вопрос. Я не вижу никаких оснований для голосования. Я могу только предположить, что тот, кто это сделал, не совсем понял вопрос. – andlrc

+0

Просто воспроизводится в этом: 'a = document.createElement ('input'); a.type = 'number'; a.setAttribute ('value', 'a'); a.value; // "" ' – andlrc

+0

Я тестировал его на Chromium и Firefox, последние версии – abimelex

ответ

1

Сначала разместите обработчики событий в блоке 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!

+1

Я тестировал его раньше без шаблона, но шаблон фактически должен просто разрешить запятую. Он работает, если я заменю тип номера по типу текста. Но вместо обычной клавиатуры используется обычная клавиатура на мобильных устройствах. – abimelex

+0

Понял - но просто называет что-то «число», но позволяет буквенно-цифровые нажатия немного испорчен. Вы можете легко написать функцию «MaskDecimal» и вставить ее в файл javascript, а затем просто назначьте эту функцию каждому текстовому поле «Десятичный» в своем решении, например: (внутри документа готов, конечно) $ («# textBoxID»)) .on («keypress», MasDecimal); –

+0

Я отредактировал свой ответ с дополнительной информацией для вас. Надеюсь, это поможет. –

0

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

myInput.addEventListener('keydown', function(event) { 
    // not 0-9 
    if (event.which < 48 || event.which > 57) { 
     // comma: 
     if (event.which == 188) { 
      this.value += '.'; 
     } 
     event.preventDefault(); 
    } 
}); 

Приведенный выше код не поддерживает NumPad и ключ десятичного, а также запятая в середине значения:

123 | 456 -> (курсор |) нажимается пользователь -> 123456.

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