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

HTML+CSS+JavaScript

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

 

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

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

тема: Что за глюк с display:none и только он у меня во всех браузерах
 
 автор: TetRiska   (13.05.2011 в 17:36)   письмо автору
 
 

Всем привет. Уже долбаных 2 часа пытаюсь разгадать загадку, но все никак. Данный пример работает в 2-х разделах. В первом работает на ура, во втором через раз. Разделы идентичны по хтмл, джаваскрипт и пхп коду, есть лишь одна разница в запросе - для первого раздела условие содержит ....='produce', а второе ....='service'. В общем перейдем к коду.
1. При загрузке странице я назначаю ф-цию селекту
window.onload = function () {
    document.getElementById('sel_category').onchange = function (){
        ref_vg(this.value); 
    }
}

2. Сама ф-ция
function ref_vg(num){
    var i = $('#hid_info').val();
    var h = $('#hid_hash').val();
    
    $('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':0},function(){
        $('#preloader,#preloader_txt').css('display','block');
    });
    
    $.post('/requests/refresh_vg.php',{'n':num,'i':i,'h':h},function(data){
        if(data != 'Hacking attempt!'){
            if(data.length > 0){
                $('#box_reload').empty().append(data);
                $('#preloader,#preloader_txt').css('display','none');
                $('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':1});
            }
        }
    });
}

#preloader{
    position:absolute;
    top:40px;
    left:30px;
    width:32px;
    height:24px;
    background:url(/images/sliderload.gif) no-repeat;
    display:none;
}
#preloader_txt{
    position:absolute;
    top:43px;
    left:77px;
    font-size:13px;
    color:#999999;
    font-weight:bold;
    display:none;
}

Работает так:
- выбираем из селекта категорию и сразу же у нас плавно скрывается #arrow_left,#arrow_center,#arrow_right
- после появляется #preloader,#preloader_txt
- полученные данные загружаются в блок #box_reload
- после загрузки скрываются #preloader,#preloader_txt и плавно появляется #arrow_left,#arrow_center,#arrow_right

Здесь одно но. Не всегда скрывается #preloader,#preloader_txt. В чем глюк я не пойму.
В списке допустим такие данные:
1
2
3
4
5

И вот когда я выбираю 3 - #preloader,#preloader_txt появляется и потом скрывается, выбираю 4 - #preloader,#preloader_txt появляется и потом, то скрывается, то не скрывается, т. е. display:none не назначается для #preloader,#preloader_txt. Пробовал выбирать другие данные из списка, то не со всеми такое происходит.

Самое главное, когда я попросил проверить знакомого, то у него все окей в ФФ и Опере, проверялось на 3-х компах. А у меня как на зло в ФФ, Опере (11, 9.25, 9.64), Хроме, всех ИЕ такой глюк :(

Жду с нетерпением Ваших идей, в чем может быть проблема.

П.С. Просил еще одного знакомого, то у него такие же глюки прослеживаются :(

  Ответить  
 
 автор: AlexSol   (13.05.2011 в 20:40)   письмо автору
 
   для: TetRiska   (13.05.2011 в 17:36)
 

firefox+firebug

проверяйте что у вас приход в ответ на запрос.

+ если анимация не успеет проиграться /ответ придет раньше/ у вас нарушиться логика

$('#arrow_left,#arrow_center,#arrow_right').stop().animate({})

  Ответить  
 
 автор: TetRiska   (14.05.2011 в 11:58)   письмо автору
 
   для: AlexSol   (13.05.2011 в 20:40)
 

с этим я и работаю firefox+firebug
получается, что после получения данных прелоадеру display:none не всегда успевает назначится, через раз то скрывает, то нет....почему такая реакция я не знаю.
в ответ на запрос приходят всегда нужные данные.
куда это прописать и зачем?
$('#arrow_left,#arrow_center,#arrow_right').stop().animate({})

я бы мог дать Вас доступ на сайт, чтобы посмотрели своими глазами на проблему, но это уже ближе к вечеру

  Ответить  
 
 автор: AlexSol   (14.05.2011 в 12:04)   письмо автору
 
   для: TetRiska   (14.05.2011 в 11:58)
 

передел любым animate останавливайте.

вы меняете прозрачность 0-> и 1->0 для одних и тех же элементов.
и если ответ от сервера приходит раньше завершения анимации возможен сбой.

  Ответить  
 
 автор: TetRiska   (14.05.2011 в 12:13)   письмо автору
 
   для: AlexSol   (14.05.2011 в 12:04)
 

тобишь если идет анимация #arrow_left,#arrow_center,#arrow_right и показ прелоадера и в этот момент мы получили данные, то скрытие прелоадера display:none может не произойти? но самое интересное, что анимация после получения данных срабатывает в любом случае

если верно понял, то нужно так исправить ф-цию
function ref_vg(num){
    var i = $('#hid_info').val();
    var h = $('#hid_hash').val();
    
    $('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':0},function(){
        $('#preloader,#preloader_txt').css('display','block');
    });
    
    $.post('/requests/refresh_vg.php',{'n':num,'i':i,'h':h},function(data){
        if(data != 'Hacking attempt!'){
            if(data.length > 0){
                $('#box_reload').empty().append(data);
                $('#arrow_left,#arrow_center,#arrow_right').stop().animate();
                //останавливаем анимацию на случай вдруг получили данные раньше ее завершения, чтобы следующие условие display:none сработало
                $('#preloader,#preloader_txt').css('display','none');
                $('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':1});
            }
        }
    });
}

а можно поступить следующим образом:
function ref_vg(num){
    var i = $('#hid_info').val();
    var h = $('#hid_hash').val();
    
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':0},function(){
    $('#preloader,#preloader_txt').css('display','block');
    $.post('/requests/refresh_vg.php',{'n':num,'i':i,'h':h},function(data){
        if(data != 'Hacking attempt!'){
            if(data.length > 0){
                $('#box_reload').empty().append(data);
                $('#preloader,#preloader_txt').css('display','none');
                $('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':1});
            }
        }
    });
});
}

единственное что режет глаз, что запрос отправится после отработки анимации

  Ответить  
Rambler's Top100
вверх

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