Используйте JavaScript с WTForms - PullRequest
       10

Используйте JavaScript с WTForms

0 голосов
/ 20 ноября 2018

Я пытался использовать JavaScript для проверки только чисел в поле. Но не работает

Здесь у меня есть код JavaScript:

 <script language="JavaScript">
function onlyNumbers(evt)
{
var e = event || evt; // for trans-browser compatibility
var charCode = e.which || e.keyCode;

if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;

return true;

}
</script>

и вот у меня есть WTForms, которые я использую с Flask:

{{ form.saturacion.label(class="form-control-label") }}
                     {% if form.saturacion.errors %}
                        {{ form.saturacion(class="form-control form-control-lg is-invalid") }}
          <div class="invalid-feedback">
                  {% for error in form.saturacion.errors %}
                        <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        {{ form.saturacion(class="form-control form-control-lg") }}
                    {% endif %}

Эти два в HTML-файле

И вот у меня есть форма:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField, SelectField,RadioField,IntegerField
from wtforms.validators import DataRequired,Length, Email, EqualTo,ValidationError,InputRequired
from init.models import User

class PredictionForm(FlaskForm):
    saturacion = IntegerField('Saturacion de O2', validators=[InputRequired(), Length(min=1, max=2)])

Может кто-нибудь сказать мне, как разрешить только числа в этом поле с WTForms?

1 Ответ

0 голосов
/ 21 ноября 2018

wtforms native IntegerField (импортируется с from wtforms import IntegerField) отображает текстовый ввод:

class IntegerField(Field):
    """
    A text field, except all input is coerced to an integer.  Erroneous input
    is ignored and will not be accepted as a value.
    """
    widget = widgets.TextInput()

Если вы импортируете собственный ввод HTML5 (from wtforms.fields.html5 import IntegerField), тогда проверка выполняется вашим браузером без необходимости использования JS, поскольку ввод формы другого типа:

class IntegerField(core.IntegerField):
    """
    Represents an ``<input type="number">``.
    """
    widget = widgets.NumberInput(step='1')

Из чтения вашего JS я нигде не вижу, где вы подключаетесь к процессу отправки формы, чтобы предотвратить или пропустить его, а также я не вижу, как вы подключаете свою функцию к конкретному вводу формы.

...