Я создаю индикатор загрузки на моей кнопке отправки и присоединяю процедуру «запуска» к событию beforeSubmit, используя функцию registerJs.Yii2 Pjax и ActiveForm beforeSubmit не работают после перезагрузки?
Он работает правильно в первый раз, но после перезагрузки контейнера Pjax событие не будет срабатывать при повторной отправке формы.
Я прилагаю весь файл вида в контейнере Pjax, чтобы корректно отображались флэш-сообщения.
Вот main.php файл макета сниппет:
<?php Pjax::begin([
'id' => 'pjax-container',
'enablePushState' => false,
]); ?>
<?= Alert::widget(); ?>
<?= $content; ?>
<?php Pjax::end(); ?>
А вот функция registerJs, расположенный в main.php в разделе:
<?php
$js = <<< 'SCRIPT'
$('#form').on('beforeSubmit', function(){
alert('Submitted...');
//$("#spinner").fadeIn();
});
SCRIPT;
$this->registerJs($js);
?>
А вот ActiveForm:
<?php $form = ActiveForm::begin(['id' => 'form', 'options' => ['data-pjax' => true]]); ?>
<?= $form->field($model, 'name')->textInput(['type' => 'text']) ?>
<?= $form->field($model, 'email')->textInput(['type' => 'email']) ?>
<?= $form->field($model, 'subject')->textInput(['type' => 'text']) ?>
<?php
echo $form->field($model, 'message')->textArea(['rows' => 6]);
echo $form->field($model, 'verify_code')->widget(Captcha::className(), [
'captchaAction' => 'site/captcha',
'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-6">{input}</div></div>',
]);
?>
<button class="btn btn-success">
<span id="spinner" style="display: none; float:left; margin-right: 26px;">
<?php
echo Spinner::widget([
'pluginOptions' => [
'top' => '50%',
'left' => '10px',
'lines' => 11,
'length' => 5,
'width' => 3,
'corners' => 1,
'trail' => 100,
'speed' => 1.25,
'radius' => 4,
],
]);
?>
</span>
<?php echo $model->isNewRecord ? 'Send Message' : 'Update'; ?>
</button>
<?php ActiveForm::end(); ?>
Я использую Картик Spinner Widget (Details and Demo)
Любые идеи о том, почему событие beforeSubmit не будет срабатывать после того, как Pjax загрузил контейнер данных после успешной отправки?
Спасибо.
Какой метод визуализации вы используете в своем контроллере? просто render()? или renderAjax()? –
Я использовал render(), но сделал быстрый тест с renderAjax(), и это, казалось, сработало. Мне пришлось переместить функцию registerJs() в фактический файл просмотра. И теперь появляются флеш-сообщения. Есть идеи? –
Извините, я хотел сказать, что флеш-сообщения не отображаются на загрузке Ajax. –