JS показать / скрыть блок div

Скажите, что делаю не так?

После нажатия "open_modal_sms" modal_sms и modal_overlay_bg сразу закрываются
<script>
$(document).ready(function() {
    document.getElementById('modal_overlay_bg').style.display='none';
    document.getElementById('modal_sms').style.display='none';
})


function close_modal_sms() {
    document.getElementById('modal_overlay_bg').style.display='none';
    document.getElementById('modal_sms').style.display='none';
   }


function open_modal_sms() {
    document.getElementById('modal_overlay_bg').style.display='block';
    document.getElementById('modal_sms').style.display='block';
   }
</script>



<div id="modal_overlay_bg" OnClick="close_modal_sms();" class="modal_overlay"></div>
<div id="modal_sms" class="modal_sms">


<div id="">
</div>



</div>


вызывается:

<a href="" OnClick="open_modal_sms();"><li>Сообщения</li></a>
  • Вопрос задан
  • 12156 просмотров
Пригласить эксперта
Ответы на вопрос 3
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
Полагаю, тут где-то есть ссылка? )
Ответ написан
@netz-sanya Автор вопроса
<a href="" OnClick="open_modal_sms();"><li>Сообщения</li></a>


Изменил на

<a href="#" OnClick="open_modal_sms();"><li>Сообщения</li></a>

и стало все нормально открываться. Подскажите, почему?
Ответ написан
@IoannGrozny
Front-end разработчик
Объясню, что делаете не так. Когда вы кликаете по ссылке, происходит т.н. «всплытие события». Т.е. клик по ссылке --> перехода не произошло --> клик по родителю ссылки --> перехода не произошло --> клик по родителю родителя ссылки --> ... ---> клик по всей области документа. Сейчас вы добавили href = "#" , таким образом происходит переход по ссылке-якорю и всё нормально до тех пор, пока вам не понадобится открыть модальное окно где-нибудь внизу документа, в том случае вы увидите, что весь документ у вас прокручивается вверх. Попробуем оптимизировать:
/* 
это фрагмент не нужен, на самом деле. просто пропишите в css display:none для этих элементов, и добавьте класс visible с display:block;
*/
//удалить
$(document).ready(function() {
    document.getElementById('modal_overlay_bg').style.display='none';
    document.getElementById('modal_sms').style.display='none';
})
//удалить

//Идем далее

/* открываем окно*/

$("html").on("click", ".open_modal_sms",function(e) {
    $('#modal_overlay_bg').addClass('visible');
    $('#modal_sms').addClass('visible');
    e.stopPropagation(); //останавливаем всплытие
}); 

/* закрываем окно */

$('html').on('click', function() {
   $('.visible').removeClass('visible');
});

Посмотрим CSS:
#modal_overlay_bg,
#modal_sms {
    display:none;
}

#modal_overlay_bg.visible,
#modal_sms.visible {
    display:block;
}


Ну и HTML для вызова:
<!-- И ни в коем случае не вставляйте li в ссылку, как сделано у вас, это bad practice -->
<li><a href="#" class="open_modal_sms">Сообщения</a></li>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы