Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не срабатывает if else, что не так?
 
 автор: bogusua   (16.11.2007 в 12:15)   письмо автору
 
 

вот мой код

var step4_w = (window.screenLeft + 200);
if (document.body.clientHeight >= 200) { 
var step4_h = (window.screenTop + 500);
        } else {
var step4_h = (document.body.clientHeight);
            }
    Agent.MoveTo(step4_w,step4_h);


и тут почемуто в любом случае срабатывает первый вариант, где я приплюсовую 500 пикселей от начала рабочей области

   
 
 автор: CNT   (16.11.2007 в 20:08)   письмо автору
 
   для: bogusua   (16.11.2007 в 12:15)
 

А вы перед IF (...) пропишите alert ((document.body.clientHeight >= 200)) и удостоверяйтесь каждый раз, что у вас получается значение true, а false никогда не получается.

Предположу, что ПЕРЕД выполнением этого условного оператора у вас выполняется какое-то действие по изменению геометрии окна браузера.
Если так, то вполне возможны глюки. Ибо любое действие по изменению геометрии требует ЗНАЧИТЕЛЬНОГО времени на выполнение, а последовательный JS-код выполняется значительно быстрее. Браузер просто не успевает изменить страницу после получения команды и геометрические значения выводятся совершенно дикие в этом случае.
Например, для IE версий до 6.0 был возможен код, определяющий тип ONUNLOAD'a - при нажатии на крестик именно clientHeight "вылетал" аж в миллионы пикселей. Поэтому именно закрытие окна можно было отследить (а переход по ссылке или вызов другой страницы из "Избранного" уже различить между собой было нельзя).

Поэтому в этом случае (да и в любом ином, когда не только меняются размеры, но и проводится любое run-time действие - например, добавление нового элемента на страницу), необходимо "притормозить" выполнение скрипта.
Обычно это делается так:
1. код разбивается на куски - границей куска является именно run-time действие
2. вызов следующего куска кода осуществляется через setTimeout - и можно даже с нулевым временем.
Т.е. в вашем случае будет так:

var step4_w = (window.screenLeft + 200);
setTimeout (myFunc, 0);

function mfunc ()
{
if (document.body.clientHeight >= 200) { 
var step4_h = (window.screenTop + 500);
        } else {
var step4_h = (document.body.clientHeight);
            }
    Agent.MoveTo(step4_w,step4_h);
...
}
разумеется, следите за переменными - или чтобы они были глобальными, или же передавайте их в качестве аргументов функций.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования