Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.11.2011, 00:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

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) {
Ответить с цитированием
  #12 (permalink)  
Старый 05.12.2011, 02:45
Новичок на форуме
Отправить личное сообщение для Gosha Посмотреть профиль Найти все сообщения от Gosha
 
Регистрация: 25.11.2011
Сообщений: 9

Спасибо. Ваш вариант сильно дергается. И неправильно функционирует, видать из-за отсутствия живого примера для фикса. Но код я все таки читабельнее сваял.

И вот еще что я нашел. Оказывается существует такая штука как data(), в которой можно хранить состояние, как в массивах ключ/значение для каждого объекта

Например так
$("#div")data("status", "open");
а вытащить так
alert ($("#div")data("status"));

Что я и применил.
Проблема теперь в том, что еще не успев загрузить картинки, в какой-то момент скрипт берет высоту недогруженного дива и анимирует до него. А когда картинки полностью загрузятся, резко растягивается, создавая впечатление дергания.

Есть ли способ как-то отследить полную загрузку контента в блоке?
Ответить с цитированием
  #13 (permalink)  
Старый 05.12.2011, 12:48
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

$(window).load(function(){...........});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подгрузка контента Контакта beerdy AJAX и COMET 5 25.10.2011 10:24
Подгрузка контента по select mixalic AJAX и COMET 5 11.10.2011 19:02
Подгрузка контента в определённый DIV при нажатии на ссылку, без перезагрузки страниц Flashton Events/DOM/Window 0 10.03.2010 19:53
подгрузка контента guelder jQuery 9 29.07.2009 15:33