Как я могу добавить проверку, если подпись введена с использованием проверки jquery и signature_pad?

Я использую jquery.validate.js для проверки нескольких полей в моей форме вместе с подписью smizek. Я хочу проверить, если что-то рисуется на холсте html (панель подписи) в то же время все другие поля ввода проверяются.

К сожалению, добавления функции в обработчик проверки jquery для проверки наличия подписи на холсте недостаточно, поскольку это срабатывает только после того, как все остальные обязательные поля будут выполнены. Я могу добавить методы в валидатор jquery, но я уверен, что они работают только для проверки содержимого входных данных, а не для холста.

Я могу проверить, существует ли подпись с помощью "signaturePad.isEmpty()". В идеале, есть способ добавить такую ​​функцию, которая происходит одновременно с любой проверкой:

    var errorExists = false;
    if( signaturePad.isEmpty()){
      if (errorExists == false){
        $( "#signature-pad" ).append( "<div id="sig-error">A signature is required</div>" );
        errorExists = true;
      }
    }else if( !signaturePad.isEmpty()) {
      if (errorExists == true){
        $('#sig-error').remove();
      }
    }

... и продолжать отправлять форму только в том случае, если удовлетворены как проверка jquery, так и подпись.

Есть ли способ получить триггер функции одновременно с другой проверкой, а не после? Как я могу остановить отправку формы, если не выполнены оба моих условия - не только проверка jquery?

2 ответа

Решение

В обработчике проверки JQuery, return false если подпись не заполнена:

    if( signaturePad.isEmpty()){
            console.log('it is empty');
            return false;            
        }

Это предотвращает отправку формы, если нет подписи.

Чтобы отобразить сообщение об ошибке для отсутствующей подписи, как и остальные сообщения об ошибках проверки jquery, привяжите функцию к щелчку отправки ввода:

    $('#submit_form').click(function(){
      if( signaturePad.isEmpty()){
        if (errorExists === false){
          $( "#signature-pad" ).append( "<div class='error' id='sig-error'>A signature is required</div>" );
          errorExists = true;
        }
      }else if( !signaturePad.isEmpty()) {
        if (errorExists === true){
          $('#sig-error').remove();
          errorExists = false;
        }
      }
    });

Объявите вашу переменную где-нибудь:var errorExists = false;

Я сделал скрытое поле с пользовательской проверкой, чтобы справиться с этим.

JavaScript для установки значения скрытого поля в подпись в кодировке base64.

<script type="text/javascript">
            window.onload = function() {
              $( "#application" ).submit(function( event ) {
                var canvas = document.getElementById('canvas');
                var sigData = canvas.toDataURL("image/png");
                $('#signature').attr('value', sigData);
              });
            }
          </script>

Подпись Pad HTML

<div class="m-signature-pad" id="signature-pad">
              <div class="m-signature-pad--body">
                <canvas id="canvas" width="611" height="150"></canvas>
              </div>
              <div class="m-signature-pad--footer">
                <button class="button clear" data-action="clear" type="button">Clear</button>
                <div class="description">
                  Sign above
                </div>
              </div>
            </div>

Форма HTML

<input data-rule-signature="true" id="signature" name="signature" type="hidden">

Пользовательский код проверки добавлен в jquery-validate-Additional-method.js (ссылка на скачивание находится на этой странице)

jQuery.validator.addMethod("signature", function(value, element, options) {
    if( signaturePad.isEmpty()){
            return false;            
        }
    return true;
}, "Your signature is required");

Используйте это:!signaturePad.IsEmpty();

Другие вопросы по тегам