Создание Div'а с помощью JavaScript'а
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Создание Div'а с помощью JavaScript'а Expand / Collapse
Автор
Сообщение
27.12.2006 14:55
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 29.12.2006 13:12
Сообщ.: 5, Visits: 15
Здравствуйте!
Есть таблица результатов. Кликаю по столбцу - выполняется сортировка всей таблицы. В этом момент мне нужно что-то писать юзеру. Хочу сделать див с инфой, чтобы он появлялся сразу после клика по столбцу таблицы и исчезал по окончании сортировки.
Я создаю его:

function ShowInfoDiv()
{
  document.writeln("<div id='infoDiv' style='...'>Идет сортировка..</div>");
}
//  скрытие дива
function HideInfoDiv()
{
  getElementById('infoDiv').style.display = 'none';
}

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

P.S. Дело в том, что его нужно создавать именно JavaScript'ом, а не делать его невидимым, а потом визуализировать.

Сообщ. #909300
27.12.2006 16:04
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Через методы DOM надо работать:

function ShowInfoDiv()
{
    var oDiv = document.createElement("DIV");
    oDiv.id = "infoDiv";
    var oText = document.createTextNode("Идет сортировка");
    oDiv.appendChild(oText);
    document.body.appendChild(oDiv);
}

Стиль для такого DIVa может быть например таким:

#infoDiv {position:absolute; left:0; top:0; width:100%; height:100%; background:black; color:white; z-index:10}

Сообщ. #909303
29.12.2006 10:58
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 29.12.2006 13:12
Сообщ.: 5, Visits: 15
Хорошо.
У вас все работает на простом примере - у меня тоже.
А теперь реальная ситуация.

[code=javascript]
function sortColumn(e)
{
    ShowInfoDiv();
    LetSort();
    HideInfoDiv();    //  никаких задержек!! - нафиг они мне нужны
}

function LetSort()   //  заглушка реальной сортировки
{
 var res;
 for(var i=0; i<1000000; i++)
      for(var j=i; j<1000000; j++)
         res += i*i*i/(j*j);
}

function ShowInfoDiv()
{
    if(document.all['infoDiv'])
    {
        document.getElementById('infoDiv').style.display = '';
        return;
    }
    var divWidth = 200;
    var divHeight = 22;
    var left = parseInt((document.body.clientWidth - divWidth) / 2)-10;
    var top = parseInt((document.body.clientHeight - divHeight) / 2)-10; 
    elDiv = document.createElement('div');
    elDiv.innerHTML = "<div id='infoDiv' style='left:"+left+"; top:"+top+"; position:absolute; display:block;"+
        " background:#778899; color:White; font-size:larger; text-align:center; width:" +divWidth+ "; height:" +divHeight+ ";'>Процесс сортировки...</div>";
    document.body.appendChild(elDiv);   
}
function HideInfoDiv()
{
    document.getElementById('infoDiv').style.display = 'none';
}
[/code]

Дальше идет  просто таблица с кучей записей:
[code=html]
<body>
  <table onclick="sortColumn(event);">
      .....
  </table>
</body>
[/code]

Так вот. Дело все в том, что этот div появляется только после того, как закончена сортировка. А мне-то надо, чтобы он появлялся ДО нее!
Вот в чем проблема-то.

Сообщ. #909348
29.12.2006 11:11
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Пока идет выполнение скрипта браузер не будет обновлять экран. Поэтому придется использовать таймер:

function sortColumn(e)
{
    ShowInfoDiv();
    setTimeout("LetSort(); HideInfoDiv()", 100);
}

Еще я бы избавился от обращения к document.all в функции ShowInfoDiv. Эта коллекция работает только в MSIE/Opera и вообще про нее давно пора уже забыть т.к. анлогичные вещи реализованы в DOM (ее поддерживают все современные браузеры).

function ShowInfoDiv()
{
    var infoDiv = document.getElementById('infoDiv');
    if(null != infoDiv)
    {
        infoDiv.style.display = 'block';
        return;
    }
    ...
}
Сообщ. #909349
29.12.2006 11:29
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 29.12.2006 13:12
Сообщ.: 5, Visits: 15
Спасибо, блин, большое!

Чтоб я без Вас делал?!!

А то я тут весь извелся - не кажет и все тут!

Мда.  Век живи - век учись, и дураком помрешь.

Однако, JS - очень нетривиальный язык! :)

Сообщ. #909350
29.12.2006 11:38
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 29.12.2006 13:12
Сообщ.: 5, Visits: 15
слушай, а почему когда ставлю задержку 1, а не 100, у меня первый раз div не появляется, только после 2-го раза?
Сообщ. #909351
29.12.2006 11:44
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Видимо браузер не успевает за такой короткий интервал обновить экран.
Сообщ. #909352
29.12.2006 12:00
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Я имею в виду то, что создание нового DIVa (что делается в первый раз) требует больше времени чем переключение его видимости (что делается во второй).
Сообщ. #909355
29.12.2006 12:26
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 29.12.2006 13:12
Сообщ.: 5, Visits: 15
ну да, я понял.

Просто как мне подобрать такую задержку, чтобы на всех пользовательских компах в первый раз браузер успевал создать и отобразить div?

А ставить большую, тоже, сам понимаешь, не очень хочется.

Сообщ. #909357