Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Динамическое выравнивание блоков по высоте (https://javascript.ru/forum/jquery/75812-dinamicheskoe-vyravnivanie-blokov-po-vysote.html)

mpavelvl 08.11.2018 12:30

Динамическое выравнивание блоков по высоте
 
Здравствуйте. Есть такой скрипт:
function setEqualHeight(columns)
{
var tallestcolumn = 0;
columns.each(
function()
{
currentHeight = $(this).height();
if(currentHeight > tallestcolumn)
{
tallestcolumn = currentHeight;
}
}
);
columns.height(tallestcolumn);
}
$(document).ready(function() {
setEqualHeight($(".columns > div.hd2"));
});

Он работает, НО если менять ширину экрана или применять фильтр динамический, то скрипт уже не срабатывает, потому что не перегружается страница.
Подскажите, пожалуйста, как сделать, чтобы скрипт срабатывал постоянно?

SuperZen 08.11.2018 12:42

$(document).ready(function() {
 setEqualHeight($(".columns > div.hd2"));
 $( window ).resize(function() {
   setEqualHeight($(".columns > div.hd2"));
 });
});


как-то так, наверное...

mpavelvl 08.11.2018 12:58

Не работает(((

j0hnik 08.11.2018 13:23

function setEqualHeight(columns)
{
var tallestcolumn = 0;
columns.each(
function()
{
currentHeight = $(this).height();
if(currentHeight > tallestcolumn)
{
tallestcolumn = currentHeight;
}
}
);
columns.height(tallestcolumn);
}
$(document).ready(function() {
setEqualHeight($(".columns > div.hd2"));
 $( window ).resize(function() {
   setEqualHeight($(".columns > div.hd2"));
 });
});

верх тоже нужен

mpavelvl 08.11.2018 13:28

Цитата:

Сообщение от j0hnik (Сообщение 498136)
верх тоже нужен

Это понятно) Не работает. Если админы разрешат, то вот ссылка, где это блоки: http://vseresume.com/

j0hnik 08.11.2018 13:47

при резайзе как раз работает, а для фильтра нужно после того как он подгрузить на странницу элементы, найдите функцию которая за это отвечает и воткните туда вниз setEqualHeight($(".columns > div.hd2"));

SuperZen 08.11.2018 13:48

ну тогда надо вызвать setEqualHeight($(".columns > div.hd2")); после применения фильтра тоже

mpavelvl 08.11.2018 14:31

Блин, жесть((( уже втыкал везде, где только можно (((

Вот код фильтра:

function xsort_empty(){
	$("#dle-content").html('<div class="xsort_empty">Ничего не найдено</div>');
}

$(document)
.on('click','.xsort-selected',function(e){
	var ul = $(this).parents('.xsort-div').find('.xsort-ul');
	var d = ul.css('display');
	$('.xsort-ul').hide();
	if(d=='none') ul.slideDown(200);
//	var litop = ul.find('li.current')[0].offsetTop-31;
//	ul.animate({'scrollTop':litop+'px'},100);
	return false;
})
.on('click','.xsort-ul li',function(){
	$this = $(this);
	var text = $this.text();
	var val = $this.data('val');
	var field = $this.parents('.xsort-ul').data('field');
	var sel = $this.parents('.xsort-div');
	if(val!=='') sel.addClass('xsort-active');
	else sel.removeClass('xsort-active');
	sel = sel.find('.xsort-selected');
	var url = window.location.href;
	if(field=='defaultsort'){
		$this.siblings().removeClass('xasc xdesc');
		sel = sel.find('span');
		if(val!==''){
			if($this.hasClass('xdesc')){
				$this.removeClass('xdesc').addClass('xasc');
				sel.attr("class","xasc");
			}else{
				$this.removeClass('xasc').addClass('xdesc');
				sel.attr("class","xdesc");
			}
		}else{
			sel.removeClass('xasc xdesc');
		}
	}else{
		if($(this).hasClass('current')){
			$this.parents('.xsort-ul').find('li').eq(0).click();
			return false;
		}
	}
	sel.html(text);
	$this.addClass('current').siblings().removeClass('current');

	if(url.indexOf('/page/')>=0){
		url = url.split('/page/');
		url = url[0]+'/';
	}
	ShowLoading();
	$(".berrors").remove();
	
	$.ajax({
		url: url,
		type: "POST",
		method: "POST",
		data: {xsort:1,xs_field:field,xs_value:val}
	}).done(function(d){
		HideLoading();
		var html = $("#dle-content",d).html();
		if(html){
			$("#dle-content").html(html);
			if(url != window.location.href) window.history.pushState(null, null, url);
		}else xsort_empty();
	}).fail(function(d){
		HideLoading();
		xsort_empty();
	})
})
.on('click','body:not(.xsort-ul)',function(){
	$('.xsort-ul').fadeOut(100);
})
.on('click','.xsort-div-filler',function(){
	ShowLoading();
	$('#xsort-admin').remove();
	$('body').append('<div id="xsort-admin" title="Поиск и формирование списка значений доп. полей" style="display:none;"/>');
	$.post(dle_root+"engine/mods/xsort/admin.php",{do:'start'},function(d){
		HideLoading();
		$('#xsort-admin').html(d).dialog({
			width: '600px',
			buttons: {
				'Закрыть':function(){
					$(this).dialog('close');
				}
			}
		});
	})
})
.on('click','.xsort-admin-area ul li',function(){
	var ul = $(this).parents('ul');
	ul.addClass('loading');
	if(!$(this).hasClass('current')) $(this).removeClass('xreverse');
	var reverse = $(this).hasClass('xreverse');
	$(this).toggleClass('xreverse');
	$(this).addClass('current').siblings().removeClass('current');
	$.post(dle_root+"engine/mods/xsort/admin.php",{field:$(this).data('field'),reverse:reverse},function(d){
		ul.removeClass('loading');
		$('.xsort-admin-area pre code').html(d);
	})
})
.on('click','.xsort-div-clearall',function(){
	var url = window.location.href;
	if(url.indexOf('/page/')>=0){
		url = url.split('/page/');
		url = url[0]+'/';
	}
	ShowLoading();
	$(".berrors").remove();
	$.ajax({
		url: url,
		type: "POST",
		method: "POST",
		data: {xsort:1,xs_field:'clearallfields'}
	}).done(function(d){
		HideLoading();
		window.location.href = url;
	}).fail(function(d){
		HideLoading();
		xsort_empty();
	})
})

SuperZen 08.11.2018 14:53

http://api.jquery.com/jquery.ajax/
The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are removed as of jQuery 3.0. You can use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

надо для всех $.ajax и $.post дописать always() или complete() - в зависимости от версии jq

например
$.ajax({
        url: url,
        type: "POST",
        method: "POST",
        data: {xsort:1,xs_field:'clearallfields'}
    }).done(function(d){
        HideLoading();
        window.location.href = url;
    }).fail(function(d){
        HideLoading();
        xsort_empty();
    }).always(function(d) {
        setEqualHeight($(".columns > div.hd2"));
    })

mpavelvl 08.11.2018 15:14

Урааа!! Получилось! SuperZen, спасибо большое!!!


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