@mydarck

Как улучшить код отображения модального окна?

Всячески стараюсь писать более менее грамотный JS. Пока получается не очень, но с Вашей помощью продуктивность моих потуг должна возрасти.
Начал недавно, не судите строго. JQuery стараюсь всячески избегать дабы освоить именно JS.
Вот мой код, который я пытаюсь улучшить:
function showModal() {
    var btn = document.getElementById('callback-btn');
    var modal = document.getElementById('modalCallback');

    btn.onclick = function(){
         modal.classList.add('open');
    }
    modal.onclick = function(){
        if (modal.classList.contains('open')) {
            modal.classList.remove('open');		 			
         }
     }
}
showModal();

По клику на элемент с id callback-btn, элементу с id modalCallback добавляется класс open. В общем скрипт свою функцию выполнят, однако не выделяется изящностью и гибкостью.
Так как на сайте может быть более одной формы правильно было бы не строго задавать id элемента, а получать его динамически. Сохранять результат в переменную и обрабатывать по разному, в зависимости от значения.
Я думаю, что стоит разделить представление и логику. Однако усложнять до полноценно MVC не вижу смысла.
Как вы считаете?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Сформулируйте вопрос более конкретно - что вы хотите от нас услышать.

modal.classList.contains('open')
Бессмысленная проверка, remove просто проигнорирует класс, которого нет.
https://developer.mozilla.org/en-US/docs/Web/API/E...

.onclick = function()

Не стоит назначать обработчики через свойства объекта.
https://learn.javascript.ru/introduction-browser-e...
https://jsfiddle.net/koceg/1y38k8t8/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@stasov1
без уникального id не получиться, просто это может быть data-атрибут, иначе как понять какое именно модальное окно показать пользователю? Мы делаем так - все кнопкам которые открывают модалки даем data-id="1", data-id="2" и так далее, и точно так же размечаем сами модалки общий wrapper и конкретно окно с data-id, после клика проверяем data-id и показываем модальное окно с соответствующим data-id. Вместо data-id и цифр может быть что угодно, например data-popup="one"
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы