проблема с jquery .next *?*

#jquery #internet-explorer-8 #internet-explorer-7

#jquery #internet-explorer-8 #internet-explorer-7

Вопрос:

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

Автоматическое изменение приводит к исчезновению текущего блока текста, но не исчезает в новом, что заставляет меня думать, что это .next (), который воспроизводится, поскольку нажатие на цифры (функция .click) работает нормально.

jQuery:

 function doSlideshow() {
    if ($('.image_links a.selected').attr("rel") == "five") {
        the = $('.image_links a:first');
    } else {
        the = $('.image_links a.selected').next('a');
    }
    $('.image_links a.selected').removeClass("selected");
    $(the).addClass("selected");
    var theNum = $(the).attr("rel");
    $('.image_area .images img:not(.visible)').removeClass().addClass("reset");
    $('.image_area .images img#'   theNum).removeClass().addClass("que");
    $('.image_area .images img.visible').fadeOut(500, function() {
        $('.image_area .images img.visible').removeClass().attr("style", "display:block;").addClass("reset");
        $('.image_area .images img.que').removeClass("que").addClass("visible")
    });
    $('.image_area .content .text').fadeOut();
    $('.image_area .content .text.'   theNum).fadeIn();
    thistimeout = setTimeout('doSlideshow()', 6000);
    return false;
}
$(function() {
    thistimeout = setTimeout('doSlideshow()', 6000);
    $('.image_area .images img').removeClass().addClass("reset");
    $('.image_area .images img#one').removeClass().addClass("visible");
    $('.image_links a').click(function() {
        clearTimeout(thistimeout);
        if ($(this).hasClass("selected")) {
            return false;
        }
        $('.image_links a.selected').removeClass("selected");
        $(this).addClass("selected");
        var theNum = $(this).attr("rel");
        $('.image_area .content .text').fadeOut();
        $('.image_area .content .text.'   theNum).fadeIn();
        $('.image_area .images img:not(.visible)').removeClass().addClass("reset");
        $('.image_area .images img#'   theNum).removeClass().addClass("que");
        $('.image_area .images img.visible').fadeOut(500, function() {
            $('.image_area .images img.visible').removeClass().attr("style", "display:block;").addClass("reset");
            $('.image_area .images img.que').removeClass("que").addClass("visible")
        });
        thistimeout = setTimeout('doSlideshow()', 6000);
        return false;
    });
});
  

Вот ссылка:
http://b2j3new.zen-host.com
Затронутая область — это верхняя смена изображений. Отлично работает в webkit / gecko

Большое спасибо!

Комментарии:

1. Не передавайте строку в setTimeout .

2. Привет, SLaks, я извлек строку и установил ее просто как функцию, и по-прежнему безуспешно.. тем не менее, спасибо за отзыв.

Ответ №1:

Попробуйте заменить (2 места)

 thistimeout = setTimeout('doSlideshow()', 6000);
  

с:

 thistimeout = setInterval(function() {doSlideshow();}, 6000);
  

Удалить из doSlideshow:

 thistimeout = setTimeout('doSlideshow()', 6000);
  

И изменить:

 clearTimeout(thistimeout);
  

Для:

 clearInterval(thistimeout);
  

Дайте мне знать, если это поможет.

Комментарии:

1. Привет, Джен, к сожалению, это тоже не сработало. Похоже, что функция работает — поскольку они оба исчезают, но затем следующий элемент не исчезает. Спасибо за вашу постоянную помощь!

Ответ №2:

Похоже, что IE 8 вообще не запускает вашу функцию doSlideshow.

Это рискованный шаг, но в javascript не хватает пары точек с запятой. Я уже видел, что IE чувствителен к такого рода вещам раньше, но, КАК я уже СКАЗАЛ, это досягаемость.

Исправьте две строки, которые не заканчиваются точкой с запятой.

 $('.image_area .images img.que').removeClass("que").addClass("visible")

$('.image_area .images img.que').removeClass("que").addClass("visible")
  

Комментарии:

1. привет, Джен, спасибо за ответ. Я попробовал, но безрезультатно. Довольно странно!

2. Вы пробовали проверять разметку? Известно также, что IE делает странные вещи с js, смешанным с недопустимой разметкой.

3. Моя вторая попытка ответа не удалась. У меня не было всего вашего кода, когда я тестировал. Виноват.