Вы можете использовать modal('toggle')
вместо "show"
и "hide"
.
Кроме того, вам не нужно слушать hidden.bs.modal
. То, как вы структурировали свой код, это просто означает, что когда вы нажимаете модальную кнопку, он закрывает текущий модальный режим, когда запускается его событие 'close', отображается другой модальный режим. Вы застряли в al oop, что является вашей текущей ситуацией.
Попробуйте заменить ваш код следующим образом:
let modalLogin = $('#modalLogin'),
modalRegister = $('#modalRegister');
$('#btn-open-register').on('click', '#btn-open-register-link', function () {
modalLogin.modal('toggle');
modalRegister.modal('toggle');
});
$('#btn-open-login').on('click', '#btn-open-login-link', function () {
modalRegister.modal('toggle');
modalLogin.modal('toggle');
});
Надеюсь, это поможет.
Обновление:
Переключите модалы в обратном порядке, таким образом, у вас всегда будет один видимый, который не даст полосе прокрутки отображать:
$('#btn-open-register').on('click', '#btn-open-register-link', function () {
modalRegister.modal('toggle');
modalLogin.modal('toggle');
});
$('#btn-open-login').on('click', '#btn-open-login-link', function () {
modalLogin.modal('toggle');
modalRegister.modal('toggle');
});
Обновление 2:
Принимая во внимание полосу прокрутки, вы можете обновить свой код, чтобы удалить прослушиватель событий, как только будет показан другой модал.
$('#btn-open-register').on( 'click', '#btn-open-register-link', function () {
$("#modalLogin").modal("hide");
$("#modalLogin").on("hidden.bs.modal",function(){
$("#modalRegister").modal("show");
$("#modalLogin").off("hidden.bs.modal"); // allow closing
});
});
$('#btn-open-login').on( 'click', '#btn-open-login-link', function () {
$("#modalRegister").modal("hide");
$("#modalRegister").on("hidden.bs.modal",function(){
$("#modalLogin").modal("show");
$("#modalRegister").off("hidden.bs.modal"); // allow closing
});
});
Это должно позволить вам закрыть открытый модал, не показывая другой один.