it-swarm.com.ru

проверка JQuery с маской ввода

Эта проблема заключается в том, что входные данные с назначенной маской (в качестве заполнителя) не проверяются как пустые с помощью проверки jQuery.

Я использую:

Некоторые странные поведения:

  1. Входные данные с атрибутом required проверяются (jQuery) как не пустые и, следовательно, допустимые, но с другой стороны, входные данные не считаются «не пустыми» и не проверяются для других правил проверки (это выполняется validator.js)
  2. Когда я записываю что-то в поле ввода и затем стираю, я получаю сообщение об ошибке required

Кто-нибудь может дать мне подсказку?

Правка: Соответствующий код:

HTML/PHP:

<form enctype="multipart/form-data" method="post" id="feedback">
    <div class="kontakt-form-row form-group">
        <div class="kontakt-form">
            <label for="phone" class="element">
                phone<span class="required">*</span>
            </label>
        </div>
        <div class="kontakt-form">
            <div class="element">
                <input id="phone" name="phone" ' . (isset($user['phone']) ? 'value="' . $user['phone'] . '"' : '') . ' type="text" maxlength="20" class="form-control" required="required" data-remote="/validator.php">
            </div>
        </div>
        <div class="help-block with-errors"></div>
    </div>
</form>

JS:

$(document).ready(function() {

    $('#phone').inputmask("+48 999 999 999");

    $('#feedback').validator();      
}); 
9
D. Cichowski

Это не совсем решение, но ...

изменение маски ввода для некоторого эквивалента решает проблему.

Все еще далеко от совершенства, хотя :(

ОБЪЯСНЕНИЕ:

В других библиотеках маскировки не упоминаются эти два странных поведения, поэтому можно проверять поля.

Я использовал: https://github.com/digitalBush/jquery.maskedinput

2
D. Cichowski

Я решил эту проблему с:

phone_number: {
            presence: {message: '^ Prosimy o podanie numeru telefonu'},
            format: {
                pattern: '(\\(?(\\+|00)?48\\)?)?[ -]?\\d{3}[ -]?\\d{3}[ -]?\\d{3}',
                message: function (value, attribute, validatorOptions, attributes, globalOptions) {
                    return validate.format("^ Nieprawidłowa wartość w polu Telefon");
                }
            },
            length: {
            minimum: 15,
                message: '^ Prosimy o podanie numeru telefonu'
            },
        },
0
user3089561

Мне удалось использовать маску ввода RobinHerbots (3.3.11) с jQuery Validate, активировав clearIncomplete. См. Специальный раздел документации маски ввода

Очистить неполный ввод на размытие

$(document).ready(function(){
  $("#date").inputmask("99/99/9999",{ "clearIncomplete": true });
});

Personnaly, когда это возможно, я предпочитаю устанавливать это с помощью атрибута данных HTML:

data-inputmask-clearincomplete="true"

Недостаток: частичный ввод стирается, когда фокус теряется, но я могу с этим смириться. Так что, может быть, вы тоже ...

Edit: если вам нужно добавить проверку маски к остальной части вашего процесса jQuery Validate, вы можете смоделировать ошибку jQuery Validate, выполнив следующие действия:

// Get jQuery Validate validator currently attached
var validator = $form.data('validator');

// Get inputs violating masks
var $maskedInputList 
    = $(':input[data-inputmask-mask]:not([data-inputmask-mask=""])');
var $incompleteMaskedInputList 
    = $maskedInputList.filter(function() { 
        return !$(this).inputmask("isComplete"); 
    });
if ($incompleteMaskedInputList.length > 0)
{
    var errors = {};
    $incompleteMaskedInputList.each(function () {
        var $input = $(this);
        var inputName = $input.prop('name');
        errors[inputName] 
            = localize('IncompleteMaskedInput_Message');
    });

    // Display each mask violation error as jQuery Validate error
    validator.showErrors(errors);

    // Cancel submit if any such error
    isAllInputmaskValid = false;
}

// jQuery Validate validation
var isAllInputValid = validator.form();

// Cancel submit if any of the two validation process fails
if (!isAllInputValid ||
    !isAllInputmaskValid) {
    return;
}

// Form submit
$form.submit();
0
Antoine Robin

У меня та же проблема, когда они объединяют эти две библиотеки. 

На самом деле есть похожий билет здесь: https://github.com/RobinHerbots/Inputmask/issues/1034

Вот решение, предоставленное RobinHerbots:

$("#inputPhone").inputmask("999.999.9999", {showMaskOnFocus: false, showMaskOnHover: false});

Валидатор предполагает, что он не является пустым, когда фокус/наведение маски находятся там Просто выключите фокус, и наведение маски отключит, чтобы решить проблему.

0
Terence