Атрибут sQc изображения jQuery не работает в IE7 - PullRequest
2 голосов
/ 18 ноября 2009

Я использую jQuery (на веб-сайте ASP.Net 2.0, написанном на C #, FWIW) для обработки довольно простого расширения div и обмена изображениями (для индикации состояния дисплея), и он работает как чудо в FF 3.5.5, но не удается в IE 7, и мне интересно, могли бы вы, ребята, помочь мне выяснить, почему это так.

Я загружаю jQuery 1.3.2 из кода Google, нахожу некоторые элементы в dom, переключаю видимость на несколько, а затем изменяю атрибут источника изображения displaytate. Добавление предупреждения об атрибуте src displaytate изображения в Firefox приводит к тому, что я ожидал, но в IE он не определен.

Ниже приведен соответствующий фрагмент кода:

<script language="javascript" type="text/javascript">
    google.load("jquery","1.3.2");
</script>

<script language="javascript" type="text/javascript">
    $(document).ready( function() {

        $(".prodDownloadSection").click( function() {

            var $catName = $(this).attr("id");
            var $sectionName = $catName.substr(0,$catName.length-3);
            var $productContainerDiv = $("#"+$sectionName);
            $catDisplayState = $("#"+$sectionName+"displayState");
            $productContainerDiv.slideToggle();
            $productContainerDiv.toggleClass("selected");
            $displayState = $productContainerDiv.prev("li").find("img.displayState");
            alert($displayState.attr("src"));
            if( $displayState.attr("src") == "img/placeholders/arrow-closed.gif") {
                $displayState.attr("src", "img/placeholders/arrow-open.gif");
            } else {
                $displayState.attr("src", "img/placeholders/arrow-closed.gif");
            }

        });

    });
</script>

Нет ошибок javascript, и изображение на месте на сервере, IE просто даже не распознает атрибут src, поэтому предложение if никогда не оценивается как true.

У кого-нибудь есть идеи, почему я не могу получить src этого изображения в IE?

1 Ответ

1 голос
/ 21 марта 2012

Оглядываясь назад на это 18 месяцев спустя (и, надеюсь, на 18 месяцев мудрее), я наконец понял, в чем суть проблемы.

По сути, Firefox делает здесь "неправильные" вещи, потому что он включает родителей в ответ на звонок prev(). В html-архитектуре этой страницы <li>, который я ищу, содержит элемент $productContainerDiv, поэтому prev() по праву ничего не возвращает в IE, потому что нет <li> родственного элемента $productContainerDiv.

Когда я изменяю prev("li") на parent("li"), я получаю элемент, который может найти элемент, определенный селектором ("img.displayState"). Если бы сайт, над которым я работал в то время, был на jQuery> = 1.4, parentsUntil("li") было бы еще лучшим решением.

Исправленный код для обработчика событий должен быть следующим:

$(".prodDownloadSection").click( function() {

    var $catName = $(this).attr("id");
    var $sectionName = $catName.substr(0,$catName.length-3);
    var $productContainerDiv = $("#"+$sectionName);
    $productContainerDiv.slideToggle();
    $productContainerDiv.toggleClass("selected");
    $displayState = $productContainerDiv.parents("li").find("img.displayState");
    if( $displayState.attr("src") == "img/placeholders/arrow-closed.gif") {
            $displayState.attr("src", "img/placeholders/arrow-open.gif");
    } else {
            $displayState.attr("src", "img/placeholders/arrow-closed.gif");
    }

});

Надеюсь, это поможет кому-нибудь по дороге куда-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...