jQuery проверяет плагин с атрибутом data-encrypted-name для Braintree

Я реализую форму Braintree (платежный шлюз), которая требует, чтобы поля кредитной карты имели следующий атрибут: data-encrypted-name

Это моя форма:

<form id="braintree-payment-form">
    <input type="text" name="first_name" id="first_name" />
    <br/><br/>
    <input type="text" name="last_name" id="last_name" />
    <br/>    <br/>
    <input type="text" id="number" data-encrypted-name="number" />
    <br/><br/>
    <input type="text" id="cvv" data-encrypted-name="cvv" />
    <br/><br/>
    <input type="submit" />
</form>

Проблема в том, что при попытке проверить эти поля с помощью jQuery Validate проверка работает неправильно.

Это мой код (включая библиотеку qtip для отображения сообщений об ошибках):

$(document).ready(function() {

      $("#braintree-payment-form").validate({

        errorClass: "errormessage",
        errorClass: 'error',
        validClass: 'valid',
        rules: {
          "first_name": { required: true, maxlength: 45 },
          "last_name": { required: true, maxlength: 45 }                                          
          },
        messages: { 
          "first_name":       { required: "Enter your Name", maxlength: "Largo máximo de 45 caracteres" },
          "last_name":       { required: "Enter your Last Name", maxlength: "Largo máximo de 45 caracteres" }                                       
        },
        errorPlacement: function(error, element)
        {
          //qtip
          var elem = $(element),
            corners = ['right center', 'left center'],
            flipIt = elem.parents('span.right').length > 0;

          if(!error.is(':empty')) {
            elem.filter(':not(.valid)').qtip({
              overwrite: false,
              content: error,
              position: {
                my: corners[ flipIt ? 0 : 1 ],
                at: corners[ flipIt ? 1 : 0 ],
                viewport: $(window)
              },
              show: {
                event: false,
                ready: true
              },
              hide: false,
              style: {
                classes: 'ui-tooltip-blue'
              }
            })
            .qtip('option', 'content.text', error);
          }
          else { elem.qtip('destroy'); }
        },
        success: $.noop,
        debug: false
      });

$( "#number" ).rules( "add", {
        required: true,
    creditcard: true,
        messages: {
            required: "Credit Card Number is required",
        creditcard: "Invalid Credit Card Number"
  }
});

$( "#cvv" ).rules( "add", {
required: true,
        messages: {
            required: "CVV Invalid"
  }
});

  });

Имя и фамилия проверяются правильно, но если вы введете номер карты, первый номер будет проверен, а затем поле CVV повторяет то же самое сообщение проверки карты.

Посмотрите на эту ссылку: jsFiddle

Мой код основан на примере из этого ответа: jQuery проверяет плагин, добавляя несколько .rules () функция

Заранее спасибо!

Привет.


person Nacho Sarmiento    schedule 15.01.2014    source источник


Ответы (1)


Похоже, плагин проверки jQuery требует, чтобы ваши входные данные имели атрибуты name для правильной работы.

<form id="braintree-payment-form">
    <input type="text" name="first_name" id="first_name" />
    <br/><br/>
    <input type="text" name="last_name" id="last_name" />
    <br/><br/>
    <input type="text" name="number" id="number" data-encrypted-name="number" />
    <br/><br/>
    <input type="text" name="cvv" id="cvv" data-encrypted-name="cvv" />
    <br/><br/>
    <input type="submit" />
</form>

Однако методы шифрования внутри braintree.js удалят атрибут name входных данных, которые он шифрует, чтобы вы не могли отправлять необработанные данные кредитной карты на свой сервер. Это может вызвать проблемы, если вы зашифруете форму, но проверка ввода не пройдёт. Как правило, мы рекомендуем выполнять шифрование на последнем этапе процесса отправки формы.

person Ben Truyman    schedule 15.01.2014
comment
Проверка @Shina без атрибутов имени у меня не работает. Мне нужна проверка с помощью С#.net - person Singh; 01.05.2014
comment
‹form id=braintree-payment-form› ‹div›Number:‹input type=text size=20 autocomplete=off data-encrypted-name=number placeholder=Number /›@Html.ValidationMessageFor(m =› m.Number) ‹/div› ‹div›CVV:‹тип ввода=размер текста=4 autocomplete=off data-encrypted-name=cvv placeholder=CVV /›@Html.ValidationMessageFor(m =› m.CVV)‹/div› ‹div ›CardHolderName: @Html.TextBoxFor(m =› m.CardHolderName, new { @placeholder = Имя держателя карты })@Html.ValidationMessageFor(m =› m.CardHolderName)‹/div› ‹input type=submit /› ‹/ форма> - person Singh; 02.05.2014
comment
@Shina Извините, я новичок здесь, в stackoverflow, поэтому я не могу вставить свой код как html. - person Singh; 02.05.2014
comment
@KulbirSingh ... у вас есть атрибут: required=required? - person Shina; 02.05.2014
comment
@Shina Большое спасибо за ваш любезный ответ, да, у меня есть обязательный атрибут как для CVV, так и для номера, но странное поведение заключается в том, что обязательный атрибут отлично работает для поля «Число», но не для поля CVV. Когда я пытаюсь отправить форму с пустым полем CVV, она разрешает отправку формы. Я не могу поймать проблему - person Singh; 05.05.2014
comment
@KulbirSingh ... Думаю, у меня была эта проблема. Сделайте это: ‹тип ввода=число имя=cvv размер=5 class=form-control input-lg cvvRequired autocomplete=off placeholder=024 required›, а затем сделайте что-то подобное в своем JS if($(this).valid() ) { $('.cvvRequired').removeAttr('type').attr('data-encrypted-name', 'cvv'); как только форма была отправлена. - person Shina; 05.05.2014
comment
@Shina, спасибо, конечно, я попробую, вы думаете, что атрибут data-encrypted-name создает проблему? - person Singh; 06.05.2014