Привет. По вот
этому примеру сделал всплывающие окно, которое подгружает форму авторизации.
Проблема в том, что по окончанию загрузки автоматически срабатывает submit, и если atocomplete подставил ваши сохраненные в браузере данные, они валидные, автоматически происходит логин, если нет, автоматически вываливается ошибка что введенные данные невалидные. Не могу убрать этот баг ни как.
Окно:
<div class="reveal main-layout-reveal popup" data-animation-in="slide-in-down"
data-animation-out="slide-out-up" id="main-layout-reveal" data-reveal>
<div class="reveal-content-container"></div>
<button class="close-button" aria-label="Dismiss alert" type="button" data-close>
<span aria-hidden="true">×</span>
</button>
</div>
Контроллер:
/**
* Login action.
*
* @return string
*/
public function actionLogin()
{
$model = new LoginForm();
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())){
if ($model->login()) {
return $this->goBack();
} else{
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
}
return $this->renderAjax('login', [
'model' => $model
]);
}
Js
$(document).on('click', '#login ', function(e) {
var modal, url;
url = $(this).data('url');
modal = $('#main-layout-reveal');
modal.children('.reveal-content-container').load(url);
modal.foundation('open');
$.post(url).done(function(resp) {
modal.children('.reveal-content-container').html(resp);
modal.foundation('open');
});
});
Partial с формой логина:
<?php $form = ActiveForm::begin([
'id' => 'login-form',
'enableAjaxValidation' => true,
'options' => [
'class' => 'form-horizontal'
],
'fieldConfig' => [
'template' => "{label}\n{input}\n{error}",
'labelOptions' => [
'class' => 'form-label'
],
],
]); ?>
<div class="row">
<div class="medium-24 columns">
<h3 class="outer-offset-bottom text-center">Welcome back!</h3>
</div>
</div>
<div class="row">
<hr>
</div>
<div class="row">
<?= $form->field($model, 'username', [
'options' => [
'class' => 'large-24 column',
],
])->textInput(['autocomplete' => 'off']) ?>
</div>
<div class="row">
<?= $form->field($model, 'password', [
'options' => [
'class' => 'large-24 column relative',
],
'template' => '{label}<div class="relative">{input}</div>{error}',
])->passwordInput(['autocomplete' => 'off']) ?>
</div>
<div class="row">
<div class="small-24 column">
<?= $form->field($model, 'rememberMe', [
'options' => [
'class' => 'no-error-display',
],
'template' => '<div class=\'pull-left\'>{input} </div>
<div class=\'pull-left\'>{label}</div>
<small class="medium-min-size pull-right" style="margin-top: 2px">'.
Html::a('Forgot your password?', Url::to('/authenticate/password-restore')).
'</small>',
])->label($model->getAttributeLabel('rememberMe'),['class'=>''])->checkbox([], false); ?>
</div>
</div>
<div class="row">
<div class="medium-12 small-16 columns">
<?= SocialLogin::widget(['action' => 'authenticate/social-login']); ?>
</div>
<div class="medium-12 small-8 columns">
<?= Html::button('Login', ['class' => 'button hollow success pull-right', 'name' => 'login-button']) ?>
</div>
</div>
<?php ActiveForm::end(); ?>
Заранее спасибо за помощь.