Как создать текстовое поле для ввода только числовых значений? Если я нажму букву или символ, текстовое поле не должно быть заполнено, оно должно разрешать только номера.
Есть ли способ рельсов для этого?
Как создать текстовое поле для ввода только числовых значений? Если я нажму букву или символ, текстовое поле не должно быть заполнено, оно должно разрешать только номера.
Есть ли способ рельсов для этого?
На стороне сервера проверьте числовое значение:
class SomeModel
validates :some_column, :numericality => {:only_integer => true}
end
и на стороне клиента добавьте маску ввода через javascript https://github.com/ruoso/jquery-regex-mask-plugin
$('#some_input').regexMask(/^\d+$/);
Используйте number_field_tag, это создаст поле номера HTML5
http://apidock.com/rails/ActionView/Helpers/FormTagHelper/number_field_tag
@clyfe ответ хороший, но этот плагин не работает с элементами HTML5 type=number. Вот некоторый быстрый код jQuery, который допускает только целые числа:
$("input[type=number]").keypress(function(event) {
if (!event.charCode) return true;
ch = String.fromCharCode(event.charCode);
return (/[\d]/.test(ch));
});
чтобы позволить десятичные знаки или запятые, сделать регулярное выражение больше похожим на те, которые находятся в плагине, например. https://github.com/ruoso/jquery-regex-mask-plugin/blob/master/regex-mask-plugin.js#L8:
/^((\d{1,3}(\,\d{3})*(((\,\d{0,2}))|((\.\d*)?)))|(\d+(\.\d*)?))$/
(Обратите внимание, что разные локали имеют разные соглашения для десятичных знаков и запятых, поэтому, вероятно, безопаснее просто указывать цифры: -)
Обратите внимание также, что это обходное решение для ошибок Chrome, упомянутых здесь: