Использование Fancybox с jquery-validate - окно подтверждения - PullRequest
0 голосов
/ 28 июня 2018

Я действительно борюсь с этим.

То, что я пытаюсь сделать для своего работодателя, это отправить проверенную форму, проблема в том, что на основе отправленных полей всплывающая форма (с использованием fancybox версии 3 - http://fancyapps.com/fancybox/3/) условия таковы, что когда местоположение является Шотландией, и окончательная сумма превышает 4550 фунтов стерлингов (вариант 2 во втором поле выбора).

Я запускаю проверку, используя $(this).validate () (так как на странице несколько форм). Затем я хочу управлять submitHandler и, исходя из условия, запустить fancybox как confirmation, чтобы при нажатии на кнопку, отображаемую в fb.box, отправлялась форма.

Мне кажется, я не передаю какую-то переменную или пропускаю что-то важное Я знаю, что есть и другие способы добиться этого, но из-за опций стилевого оформления, доступных с помощью fancybox, это предпочтительный метод, пожалуйста, помогите, я пытался это сделать в течение 2 дней.

Мое последнее средство состоит в том, чтобы взять и передать переменные из проверенной формы в служебную коробку, а затем отправить из коробки (не идеально, но может быть единственным способом). Если вы хотите просмотреть форму, пожалуйста, посетите:

https://ivapractice.co.uk

  $('form').each(function() {  
$(this).validate({
  rules:{
    location:"required",
    debtAmount:"required",
    incomeStatus:"required",
    livingStatus:"required",
    assets:"required",
    fullname:{
      required:true,
      minlength:3
    },
    phonenumber:{
      required:true,
      minlength:11,
      maxlength:11
    },
    email:{
      required:true,
      emailvalidate:true
    },
    gridCheck:"required"
  },
  messages:{
    location:"Please select what region you live in",
    debtAmount:"Please select your approximate debt level",
    incomeStatus:"How do you recieve your income",
    livingStatus:"What's your current living status",
    assets:"Please select an option",
    fullname:"Please enter you full name",
    phonenumber:"Please enter a valid phone number",
    email:"Please enter a valid e-mail address",
    gridCheck:"We require your consent to submit your enquiry"
  },
  submitHandler: function(form) {
    // some other code
    // maybe disabling submit button
    // then
    var location = $('[name=location]').val();
    var debtAmount = $('[name=debtAmount]').val();
    var incomeStatus = $('[name=incomeStatus]').val();
    var livingStatus = $('[name=livingStatus]').val();
    var assets = $('[name=assets]').val();
    if(location == 'Scotland'){
      $.fancybox.open({
        src  : 
        '<div class="container"><div class="row"><div class="col"><h1 class="text-center">Thanks for you Enquiry</h1></div></div><div class="row"><div class="col text-center><p>Based on the information you have submitted, an IVA may not be suiteable.</p><p>There are many ways in which we can still help and we work with a panel of debt advice companies that could stilll help.</p><p>Your data is important to us and we just want to maek sure you are happy for you to refer you detaisl for a more suitable soluiotion.<p></div></div><div class="row"><div class="col-md-6 col-sm-12"><button data-value="0" data-fancybox-close class="btn">I need a bit more time</button></div><div class="col-md-6 col-sm-12"><button data-value="1" data-fancybox-close class="btn">Sure that is ok</button></div></div></div>',
        type : 'inline',
        opts : {
          afterLoad: function( instance, current, e) {
            var button = e ? e.target || e.currentTarget : null;
            var value  = button ? $(button).data('value') : 0;
            if(value == 1){
              alert():
            }
          }
        }
      })
    }
    else {
      //$(form).submit();
    }
  }
});
}

1 Ответ

0 голосов
/ 28 июня 2018

Попробуйте ниже,

  1. Я добавил скрытое поле, чтобы определить, нажал ли пользователь кнопку «уверен, что все в порядке».

<input type="hidden" value="0" name="is_validated" id="is_validated">

  1. Я обновил submitHandler, как показано ниже.

    submitHandler: function(form) { 
    
    // some other code
    // maybe disabling submit button
    // then
    var location = $('[name=location]').val();
    var debtAmount = $('[name=debtAmount]').val();
    var incomeStatus = $('[name=incomeStatus]').val();
    var livingStatus = $('[name=livingStatus]').val();
    var assets = $('[name=assets]').val();
    if(location == 'Scotland' && $('#is_validated').val() != '1'){ // MODIFIED
      $.fancybox.open({
        src  : 
        '<div class="container"><div class="row"><div class="col"><h1 class="text-center">Thanks for you Enquiry</h1></div></div><div class="row"><div class="col text-center><p>Based on the information you have submitted, an IVA may not be suiteable.</p><p>There are many ways in which we can still help and we work with a panel of debt advice companies that could stilll help.</p><p>Your data is important to us and we just want to maek sure you are happy for you to refer you detaisl for a more suitable soluiotion.<p></div></div><div class="row"><div class="col-md-6 col-sm-12"><button data-value="0" class="btn data-fancybox-click">I need a bit more time</button></div><div class="col-md-6 col-sm-12"><button data-value="1" class="btn data-fancybox-click">Sure that is ok</button></div></div></div>', // MODIFIED
        type : 'inline',
        opts : {
          afterLoad: function( instance, current, e) {  // MODIFIED THIS FUNCTION
            $('body').find('.data-fancybox-click').off('click').on('click', function(e){
             var value = $(this).data("value");
             if(value == 1){
                $('#is_validated').val('1');
                $('#landingform button[type="submit"]').trigger('click');
                $.fancybox.close();
    
              }else{
                $.fancybox.close();
                $('#is_validated').val('0');
              }
            });
          }
        }
      })
    }
    else {
      $(form).submit();
    }
    }
    

Удалил атрибут data-fancybox-close с обеих кнопок в необычном окне и добавил класс data-fancybox-click, затем добавил событие нажатия для этих кнопок и соответственно изменил значение is_validated. Если пользователь нажал кнопку Sure that is ok, установите is_validated значение 1 и снова нажмите кнопку отправки формы.

Необычное окно будет отображаться, только если (location == 'Scotland' && $('#is_validated').val() != '1')

...