Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   заблокировать клик по ссылке до полной загрузки страницы (https://javascript.ru/forum/jquery/84774-zablokirovat-klik-po-ssylke-do-polnojj-zagruzki-stranicy.html)

ufaclub 15.12.2022 21:23

заблокировать клик по ссылке до полной загрузки страницы
 
есть такой кусок кода (выкладываю его часть)

$(window).on('load', function() {

	
  $('.modal-catalog-item').on('show.bs.modal', function (e) {
	  
	  
    var $modal = $(this),
      $btn = $(e.relatedTarget);

    var id = $btn.data('catalog-item-id');

    $.ajax({
      url: '/inc/catalog/item.php',
      method: 'GET',
      data: {
        'id': id
      },
      success: function (response) {
		  
		 

		  
        $modal.find('.modal-body').html(response);
        $modal.find('.modal-title').html($(".origtitle").html());
		
		

	 $modal.find('.carousel').each(function () {
          new bootstrap.Carousel(this);
        });
		
		
		




	
  $('.modal-catalog-item').on('shown.bs.modal', function (e) {

    var $modal = $(this);

    $modal.find('.modal-catalog-item-slider-main').slick({
      slidesToShow: 1,
      slidesToScroll: 1,
      arrows: false,
      asNavFor: '.modal-catalog-item-slider-nav',
      lazyLoad: 'ondemand',
	  infinite: false,
      swipe: false
    });

	
  });
  
  
  	
		
      }
	  
	  
	  
    });
  });


});



по сути он на ссылку a.modal-catalog-item открывает модальное окно

передавая параметры на генерацию содержимого к примеру

data-catalog-item-id="26"



<a class="btn-modal-catalog-item" data-bs-toggle="modal" data-bs-target=".modal-catalog-item" data-catalog-item-id="26">

тут содержание блока

</a>


так вот если внутри блока достаточно много информации слайдер к примеру то это все грузится какое то время на слабом интернете пару секунд

и если в эти пару секунд нажать на ссылку то открывается модальное окно и ничего не погружается

скрипт подключен в конце сайта </body>

но вот если дождаться полной загрузки всех картинок чтобы страница полностью прогрузилась то все ок.

т.е как то надо заблокировать нажатие на ссылки в момент когда грузится страница

думал обернув

$(window).on('load', function() {}


я как раз и должен был получить что выполнение . т.е открытие модальных ссылок будет происходить после полной загрузки страницы

но как понял это не работает.

может есть какой то вариант еще сделать недоступными клик по ссылке

a class="btn-modal-catalog-item"

перекрывать слоем z-index а потом его снимать как то не хотелось бы

может из кода удалить data-bs-toggle="modal" и как то его назначить только в конце загрузки страницы.

т.е походу сейчас в момент пока еще скрипт не загружен событие data-bs-toggle="modal" вызывает открытие пустого окна без параметров генерации контента. (которые задаются в скрипте ниже)

помогите пожалуйста кто знает специфику модальных окон на bootstrap 5.2

ufaclub 15.12.2022 21:30

т.е вот data-bs-toggle="modal" этот кусок бы только после загрузки в ссылку вставлять.

без него не открывается окно.

а так загрузилась страница полностью в ссылку


<a class="btn-modal-catalog-item" data-bs-target=".modal-catalog-item" data-catalog-item-id="26">

тут содержание блока

</a>

добавили data-bs-toggle="modal" и после уже по условиям кода

 $('.modal-catalog-item').on('show.bs.modal', function (e) {....}

происходила работа скрипта

ufaclub 15.12.2022 21:54

пробовал поднять секцию скрипта в шапку сайта до выполнения кода
ситуация не изменилась

рони 15.12.2022 22:44

ufaclub,
убрать из кнопок вызов модального окна -- установить клик на саму кнопку -- в конец success добавить вызов модального окна, всё.

рони 15.12.2022 22:49

ufaclub,
примерно так ... детали уточните по месту.
<a class="btn-modal-catalog-item"  data-catalog-item-id="26">

тут содержание блока

</a>
 <script>
        $(window).on('load', function() {
            $('[data-catalog-item-id]').on('click', function(event) {
                event.preventDefault();
                var $modal = $('.modal-catalog-item'),
                    $btn = $(this);
                var id = $btn.data('catalog-item-id');
                $.ajax({
                    url: '/inc/catalog/item.php',
                    method: 'GET',
                    data: {
                        'id': id
                    },
                    success: function(response) {
                        $modal.find('.modal-body').html(response);
                        $modal.find('.modal-title').html($(".origtitle").html());
                        $modal.find('.carousel').each(function() {
                            new bootstrap.Carousel(this);
                        });
                        $('.modal-catalog-item').on('shown.bs.modal', function(e) {
                            var $modal = $(this);
                            $modal.find('.modal-catalog-item-slider-main').slick({
                                slidesToShow: 1,
                                slidesToScroll: 1,
                                arrows: false,
                                asNavFor: '.modal-catalog-item-slider-nav',
                                lazyLoad: 'ondemand',
                                infinite: false,
                                swipe: false
                            });
                        });
                       $modal.modal("show");
                    }
                });
            });
        });
    </script>

ufaclub 15.12.2022 23:32

Спасибо! прям все в точку как хотел теперь работает. поражает ваш уровень знаний и умений!:)


Часовой пояс GMT +3, время: 06:07.