"Проверка ActiveForm не будет работать при первой модальной загрузке, НО во второй раз, если вы не обновите страницу и просто закроете модальное окно и загрузите ее снова."
Это происходит даже при новой установке yii2-app-basic
.
Какие шаги приведут к возникновению проблемы?
Создайте представление views/site/modal.php
и добавьте модальный код, как показано ниже, с дополнительнымкнопка и js
код для открытия модального окна при нажатии кнопки и событие привязки shown.bs.modal
для загрузки представления внутри раздела модального содержимого после отображения модального режима
<?php
use yii\bootstrap\Modal;
use yii\helpers\Html;
Modal::begin([
'id' => 'contact',
]);
?>
<div class="modal-header">
<h4>Contact</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<?php
echo Html::submitButton('Add Folder Now', ['class' => 'btn btn-primary']);
?>
</div>
<?php Modal::end() ;
echo Html::button('button', ['class'=>'btn btn-primary','id'=>'add-folder-button']);
$js=<<< js
$("#add-folder-button").on('click',function(){
$( '#contact' ).modal( {show:true});
$( '#contact' ).appendTo("body");
});
$( '#contact' ).on( 'shown.bs.modal', function ( event ) {
// var button = $(event.relatedTarget); // Button that triggered the modal
let modal = $( this );
modal.find( '.modal-header > h4' ).text( 'Contact Us' );
modal.find( '.modal-body' ).load( 'contact');
} );
js;
$this->registerJs($js,\yii\web\View::POS_READY);
Создание действия внутри SiteController
чтобы загрузить вышеупомянутый вид
public function actionModal(){
return $this->render('modal');
}
Теперь измените actionContact
внутри SiteController
, как показано ниже, для загрузки внутри модального окна
/**
* Displays contact page.
*
* @return Response|string
*/
public function actionContact()
{
$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
return $this->renderAjax('contact', [
'model' => $model,
]);
}
Для вида:Вы можете использовать стандартный вид contact.php
внутри папки views/site
, просто добавив приведенный ниже код поверх вида
$js=<<< js
alert("hello");
js;
$this->registerJs($js);
Каков ожидаемый результат?
при нажатии на кнопкумодальное окно должно загрузиться и как только видзагружен, он должен показать вам alert("hello")
, и если я прокручиваю / TAB через поля, он должен запустить проверку ActiveForm
клиента.
Примечание: я даже пытался указать 'enableClientValidation'=>true
в параметрах формы.
Что вы получаете вместо этого?
он ничего не показывает и не показываетalert
также не запускает проверку, вместо этого, если вы закроете и снова нажмете кнопку, чтобы открыть модальное окно, тогда все будет работать правильно.Отображается предупреждение, и проверка клиента работает.но если вы обновите страницу снова, она не будет работать снова, пока вы не откроете модальное окно, не закроете его и не откроете снова.
Вышеупомянутый сценарий отлично работает в версиях Yii 1.x, и у меня это работаетЯ работаю над расширением yii1.x, чтобы преобразовать его в yii2.x
Дополнительная информация
| Q | A
| ---------------- | ---
| Yii version | 2.0.15.1
| PHP version | 5.6
| Operating system | windows
Примечание. Я добавил проблему в GITHUB-yiisoft но он был помечен как вопрос, хотя это самая базовая настройка для открытия формы внутри модального окна, и я использовал ее в прошлом, но в настоящее время она не работает, и это не нормальное поведениелибо он должен работать, либо вообще не должен работать, если Yii не поддерживает его.