для начала было бы неплохо уменьшить свой код. его трудно читать
function topic(a, b) { var div = $("#" + b); //Тут див закрывается, если он открыт if (div.text() && parseInt(div.css("height")) ) { return div.slideUp(500); } //Тут див должен открыться с уже имеющимся контентом if (div.children().hide().length) { return div.css({ "height":"0px", "overflow":"auto"}). animate({ height: div[0].scrollHeight }, 500, function () { div.children().show() }); } //Тут див открывается, подгружая контент div.css({ "height":"0px", "overflow":"auto"}). html("Загрузка..."). children(). show(); $.ajax({ type: "POST", url: "doit.php", data: "id=" + a, success: function (msg) { div.html(msg); div.animate({ height: div[0].scrollHeight }, 500, function () { div.children().show() }) } }); } плюс пара неточностей. $("#"+b).css("height") вернет строку, а не число. т.е. 54px, а не 54 ... $("#" + b).css("overflow", "hidden"); $("#" + b).animate({ height: 0 }, 500, function () { $("#" + b).children().hide() }) это велосипед. см далее. этот код делает точно такие же действия $("#"+b).slideUp(500); ..... //Тут див должен открыться с уже имеющимся контентом if ($("#" + b).children().hide()) { что вы хотели написать в условии ? просто, $(el).hide() возвращает jq-объект, а объекты при приведении к булевому типу дают true. если вы хотите проверить, есть ли потомки, можно было посмотреть свойство length объекта jq. //Тут див должен открыться с уже имеющимся контентом if ($("#" + b).children().hide().length > 0) { |
Спасибо. Ваш вариант сильно дергается. И неправильно функционирует, видать из-за отсутствия живого примера для фикса. Но код я все таки читабельнее сваял.
И вот еще что я нашел. Оказывается существует такая штука как data(), в которой можно хранить состояние, как в массивах ключ/значение для каждого объекта Например так $("#div")data("status", "open"); а вытащить так alert ($("#div")data("status")); Что я и применил. Проблема теперь в том, что еще не успев загрузить картинки, в какой-то момент скрипт берет высоту недогруженного дива и анимирует до него. А когда картинки полностью загрузятся, резко растягивается, создавая впечатление дергания. Есть ли способ как-то отследить полную загрузку контента в блоке? |
$(window).load(function(){...........}); |
Часовой пояс GMT +3, время: 11:47. |