Почему не открывается модальное окно?

133
17 ноября 2020, 01:00

Сделал модальное окно с помощью jquery. Весь html код располагается на jsp странице, также использую spring-boot, tomcat.

<button class="button js-button-campaign">Click</button>//кнопка при нажатии на которую должно всплыть окно
<div class="overlay js-overlay-campaign">//Подложка для окна
   <div class="popup js-popup-campaign" >//само окно
        //Здесь просто форма для отправки на рест сервер.        
        <div class="close-popup js-close-campaign"></div>//чтобы можно было закрыть окно
   </div>
</div>

Вот код jquery, который лежит в отдельно файле, файл подключаю к jsp странице. Хотя я размещал его и просто в head-теге, ничего не менялось.

// открыть по кнопке
$('.js-button-campaign').click(function() { 
    $('.js-overlay-campaign').fadeIn();
    $('.js-overlay-campaign').addClass('disabled');
});
// закрыть на крестик
$('.js-close-campaign').click(function() { 
    $('.js-overlay-campaign').fadeOut();
});

Когда нажимаю на кнопку - ничего не проиходит.Проверил код просто в обычном html документе, куда подключил все необходимые ресурсы - все работает. Что не так может быть с jsp или spring-boot'ом? В чем может быть дело?

Дополнение:
У меня есть jsp страница, которая отображает таблицу, данные таблицы приходят из бд, их присылает RestController в виде json я его парсю и отображаю в виде таблицы. Я хочу использовать подход ajax, и использую, т.о:

       <script>
            var LIST_PRODUCTS = "/listProducts";
            $(document).ready(function() {
                var table = $('table');
                $.ajax({
                    type: "GET",
                    url: LIST_PRODUCTS,
                    dataType: "json",
                    async: true,
                    success: function (result) {
                        for(var i in result) {
                            var str = "<tr>";
                            for(var prop in result[i]){
                                str += "<td>" + result[i][prop] + "</td>";
                            }
                            str += "</tr>";
                            table.append(str);
                        }
                    },
                    error: function () {
                        alert("Exception");
                    }
                });
            });
        </script> 

Из этого вырисовывается нужная мне таблица, код, который отвечает за вызов всплывающей формы, был просто в теге head в <script></script> и не работало. Когда перенес код оттуда, и вставил его сразу после загрузки таблицы все начало работать. А если я хочу не хочу это все скидывать в одну кучу, в один script, а хочу раскидать по файлам, нужно везде писать код jquery в $(document).ready(function(){}) или как? Если я написал что-то глупое, то сорри, буквально сегодня начал пользовать js и jq.
Вот так у меня выглядит сейчас секция head, если перенесу методы открытия/закрытия попап окна в script где находится $(document).ready(function(){}), то начинает все работать:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
        <script src="/WEB-INF/resources/js/popupWindow.js"></script>
        <script>
            var LIST_PRODUCTS = "/listProducts";
            $(document).ready(function() {
                var table = $('table');
                $.ajax({
                    type: "GET",
                    url: LIST_PRODUCTS,
                    dataType: "json",
                    async: true,
                    success: function (result) {
                        for(var i in result) {
                            var str = "<tr>";
                            for(var prop in result[i]){
                                str += "<td>" + result[i][prop] + "</td>";
                            }
                            str += "</tr>";
                            table.append(str);
                        }
                    },
                    error: function () {
                        alert("Exception");
                    }
                });
            });
        </script>
        <script>
            $('#create_date').mask('11/11/1111');
        </script>
        <script>
            //МЕТОДЫ ОТКРЫТИЯ/ЗАКРЫТИЯ
            $('.js-button-campaign').click(function() {
                $('.js-overlay-campaign').fadeIn();
                $('.js-overlay-campaign').addClass('disabled');
            });
            // закрыть на крестик
            $('.js-close-campaign').click(function() {
                $('.js-overlay-campaign').fadeOut();
            });
        </script>
Answer 1

$('.js-button-campaign').click(function() { 
  $('.js-overlay-campaign').fadeIn(); 
  $('.js-overlay-campaign').addClass('disabled'); 
}); 
 
// закрыть на крестик 
$('.js-close-campaign').click(function() { 
  $('.js-overlay-campaign').fadeOut(); 
 
});
.overlay{ 
  position: absolute; 
  left: 0; 
  top: 0; 
  right: 0; 
  bottom: 0; 
  display: flex; 
  justify-content: center; 
  align-items: center; 
  z-index: 10; 
  background-color: rgba(0,0,0,0.1); 
} 
.popup{ 
  width: 300px; 
  height: 100px; 
  background-color: rgba(0,0,0,0.1); 
  padding: 10px; 
  box-sizing: border-box; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<button class="button js-button-campaign">Click</button> 
<div class="overlay js-overlay-campaign"> 
  <div class="popup js-popup-campaign"> 
    <div class="close-popup js-close-campaign">x</div> 
  </div> 
</div>

У вас всё работает, смотрите консоль и дополняйте свой вопрос. Никто не даст ответа, можно лишь догадываться, не более чем.

Предоставьте больше информации.

READ ALSO
Поиск в ширину с кратчайшем путем java

Поиск в ширину с кратчайшем путем java

Вопрос по существующей задаче Построение алгоритма, с чего подступиться? @Nero Вопрос такой, чем заменить конструкцию yield return для реализации...

126
Анимации фокуса в WPF

Анимации фокуса в WPF

Как убрать все стили фокуса в WPF с кнопки? Какая пропертя в стиле за это отвечает, и как с ней работать?

143
c# 8 non-nullable types и null!

c# 8 non-nullable types и null!

По мотивам этого вопроса

126
Автозагрузка DataGridView в C#

Автозагрузка DataGridView в C#

Есть поле DataGridViewКак реализовать автозагрузку данных в это поле при запуске программы?

125