Yii2 ActiveForm submit

531
07 марта 2017, 16:30

У меня есть 2 формы одна обычная

 <form id="payment" name="payment" method="post" action="https://sci.interkassa.com/" enctype="utf-8"
          target="_blank">
        <input type="hidden" name="ik_co_id" value="hdjfhjsdjsdhkj7833jfjsdhf"/>
        <input type="hidden" name="ik_pm_no" value="ID_<?= rand(1000, 9999) ?>"/>
        <input type="hidden" name="ik_am" value="<?= $game->price ?>"/>
        <input type="hidden" name="ik_cur" value="UAH"/>
        <input type="hidden" name="ik_desc" value="<?= $game->name ?>"/>
    </form>

и одна ActiveForm

 <?php $form = ActiveForm::begin() ?>
            <div class="buymail"><?= $form->field($model, 'email')->input('email')->label("E-mail *") ?></div><div class="checkaccept">
            <?= $form->field($model, 'accept')
                    ->checkbox([
                        'label' => 'Я ознакомлен с пользовательским соглашением и описанием товара*',
                    ]) ?></div>  
            <div class="buybtn"><?= Html::submitButton('Перейти к оплате  →', ['class' => 'asbtn subbtnbuy', 'onclick' => 'submitform()', 'disabled' => true]) ?></div>  
    <?php ActiveForm::end() ?>

Мне нужно както сделать так чтобы 1 обычная форма отправлялась после успешного заполнения 2 формы и нажатия на ее submit, сначало сделал так в js допсал

function submitform() {
    document.payment.submit(); }

а на submit повесил обработчик onclick' => 'submitform()', но так 1 форма отправляется при любом нажатии на submit независимо от того прошла ли валидацию 2-я форма, потом сделал так установил атрибут submit 'disabled' => true, а в js написал так

var regex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
$('#buy-accept').change(function(){
if(regex.test($('#buy-email').val())){
    $(".subbtnbuy").prop("disabled", !$(this).is(':checked'));
} });

то есть кнопка будет неактивной пока пользователь не заполнит поля 2 формы а именно email и чекбокс, в принципе оно то и работает так как нужно но при этом никаких сообщений про незаполненные поля выдаваться не будет, да и потом если галочку поставить раньше чем заполнить поле с почтой придется ее опять снимать и ставить чтоб разблокировать кнопку submit. Вот такой вопрос можно как то к сабмиту одной формы прикрепить передачу допустим в новое окно другой формы, при этом чтобы передача 2 формы срабатывала после правильного заполнения первой, или как это можно сделать иначе чтобы передавалось 2 формы по нажатию на 1 submit, но после валидации полей той формы в которой указан submit?

Answer 1

Конечно, вкл/выкл кнопки - это самое простое решение. Но правильным было бы сделать валидацию и при клике на submit первой формы проверять валидность данных второй. Например переделать функцию submitform:

var validateAlgoritm = { 
   email: { 
      rule: function (email) { 
       
        return /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(email); 
     }, 
     errorText: 'Ваш e-mail не прошел валидацию' 
   } 
    
}, 
$email = $('#buy-email'); 
 
function validateForm2() { 
    var result = { 
       status: true, 
       text: 'ok' 
    }; 
   if(!validateAlgoritm.email.rule($email.val())) { 
     result.status = false; 
     result.text = validateAlgoritm.email.errorText; 
   } 
    
   return result; 
}; 
 
 
function submitForm() { 
    var valid = validateForm2(); 
    if(valid.status) { 
      document.payment.submit(); 
    } else { 
       alert(valid.text); 
    } 
      
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<input name="email" id="buy-email"> 
<form id="payment" name="payment" method="post"  action="https://sci.interkassa.com/" enctype="utf-8" 
          target="_blank"> 
        <input type="hidden" name="ik_co_id" value="hdjfhjsdjsdhkj7833jfjsdhf"/> 
        <input type="hidden" name="ik_pm_no" value="ID_<?= rand(1000, 9999) ?>"/> 
        <input type="hidden" name="ik_am" value="<?= $game->price ?>"/> 
        <input type="hidden" name="ik_cur" value="UAH"/> 
        <input type="hidden" name="ik_desc" value="<?= $game->name ?>"/> 
        <input type="button" value="send" onclick="submitForm()"> 
    </form>

READ ALSO
Вызов JS функции из WebView выдаёт ошибку &ldquo;function is not defined&rdquo;

Вызов JS функции из WebView выдаёт ошибку “function is not defined”

При попытке вызвать функцию MyApp_HighlightAllOccurencesOfString() из WebView

321
Как перевести таск из Grunt в Gulp?

Как перевести таск из Grunt в Gulp?

Всем приветЕсть таск для гранта, может кто помочь перевести его в таск для галпа? Чтобы синтаксис был верен

381
Нужна помощь по подбору JS библиотеки

Нужна помощь по подбору JS библиотеки

Как красиво расположить и, по возможности, добавлять и редактировать блоки организующей схемы компании с использованием Ajax?

273