Задать вопрос

Как сделать переключение табов без перезагрузки страниц?

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

//    Sort Form
    $('.js-submit-form').on('change', function () {
        $('#grid-posts-block').submit();
    });

});
$(function () {
  $('.tab-content:not(:first)').hide();
   $('#tabs-nav a').bind('click', function (e) {
    e.preventDefault();
    $this = $(this);
    $target = $(this.hash);
    $('#tabs-nav a.current').removeClass('current');
    $('.tab-content:visible').fadeOut("slow", function () {
        $this.addClass('current');
        $target.fadeIn("slow");
    });
  }).filter(':first').click();
});
  • Вопрос задан
  • 364 просмотра
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Вставь на странице с табами такой html-код и будет тебе счастье:
<script>
$(function() {
	
	// Ссылка на форму которую надо грузить без перезагрузки страницы:
	var form = $('form[action="https://dev.itlvl.com/nashi-raboty/"]');
	
	// Вешаем на поля формы обработчик кликов:
	
	form.find('input[type="radio"]').click(async function(e) {
		
		e.preventDefault(); // Предотвращаем клик
		form.css('pointer-events', 'none'); // Блокрируем повторные клики
		
		// Формируем ссылку на страницу которая содержит данные кликнутого таба:
		var link = 'https://dev.itlvl.com/nashi-raboty/?' + $(this).attr('name') + '=' + $(this).val();
		
		var request = $.ajax(link); // Запускаем процесс загрузкки этой страницы
		
		// Пока грузится, делаем плавное исчезновение текущего таба:
		await $('.grid-listing').animate({ opacity: 0 }, 500).promise();
		
		// Получаем те данные что загрузили и меняем URL в браузере:
		var html = await request; history.pushState(null, null, link);
		
		// Удаляем атрибут активности со всех полей:
		form.find('input[type="radio"]').removeAttr('checked');
		
		$(this).attr('checked', 'checked'); // Делаем активным текущий таб
		
		// Вставляем данные с нового таба на текущую страницу:
		
		var doc = new DOMParser().parseFromString(html, 'text/html');
		
		var html = $('.grid-listing', doc).html();
		$('.grid-listing').html(html);
		
		var html = $('.listing-page__pagination', doc).html();
		$('.listing-page__pagination').html(html);
		
		// Делаем плавное появление для вставленного контента:
		await $('.grid-listing').animate({ opacity: 1 }, 500).promise();
		
		form.css('pointer-events', ''); // Снимаем блокировку кликов
		
	});
	
});
</script>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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