Та же версия браузера, 2 разных обработчика JavaScript - PullRequest
0 голосов
/ 27 января 2011

Проблема решена: Я удалил первую функцию, так как она все равно не нужна, и теперь она работает во всех браузерах. Спасибо за сообщения, хотя!


Моя проблема заключается в том, что у меня есть javascript, который на одном сервере работает без каких-либо проблем в IE. Но на другом сервере мне выдает 2 ошибки в IE.

  1. Он утверждает, что мой offset (). Top является либо нулевым, либо не объектом.
  2. Мой эффект исчезновения даже не становится активным.

Тогда у меня есть еще одна ОГРОМНАЯ проблема, которая заключается в том, что в FireFox НЕ работает все.

OPS: это веб-часть, поэтому дополнительные javascript-скрипты, работающие на сайте, могут вмешаться в javascript, который я пытаюсь выполнить здесь. Но я не уверен.

Я тестировал эту веб-часть в IE 8.0.7600.16385 на обоих серверах.

Сценарий:

<script type="text/javascript" 
src="/_layouts/Progressive/Javascripts/jquery-1.4.3.js"></script>

<script type="text/javascript">
(function($) {
    $.fn.goTo = function() {
        // This is where IE on the second server claims the error to be.
        $('html, body').animate({scrollTop: $(this).offset().top + 'px'}, 'fast');
        return this;
    }
})(jQuery);

function showParagraphs(sender) {
    var id = sender.getAttribute('href');
    if ($('#<%=paragraph.ClientID%>').hasClass("readable")) {
        $('#<%=paragraph.ClientID%>').removeClass("readable");
        highlightSelected(id);
    }
    else {
        $('#<%=paragraph.ClientID%>').addClass("readable");
        rmvClass(id);
    }
};

function highlightSelected(id) {
    $(id).goTo();
    $(id).addClass("reading");
    // This part is what isn't activated on the second server.
    $('.reading').fadeOut(400).fadeIn(400).fadeOut(400).fadeIn(400);
    // .reading only adds a gray background to the DIV.
};

function rmvClass(id) {
    $('div').each(function() {
        if ($(this).hasClass("reading")) {
            $(this).removeClass("reading");
        }
    });
}

function toTop() {
    $('div').each(function() {
        $(this).removeClass("reading");
    });
    $('#<%=paragraph.ClientID%>').addClass("readable");
}

$(document).ready(function() {
    $('#<%=q.ClientID%>').find('dd').hide().end().find('dt').click(function() {
        $(this).next().slideToggle("fast");
    });

    $("#<%=q.ClientID%> dt").click(function() {
        if ($(this).hasClass("selected")) {
            $(this).removeClass("selected");
        }
        else {
            $(this).addClass("selected");
        }
    });
});
</script>

Есть мысли или предложения?

1 Ответ

0 голосов
/ 27 января 2011

Когда

$(id)

возвращает пустой объект jQuery, тогда ".offset ()" вернет null.Вы называете этот код «highlightSelected» со значением «href» из чего-то, так что, возможно, то, что вы считаете значением «id», которое соответствует чему-то на странице, ну, на самом деле это не так.Однако трудно это знать наверняка, потому что вы не разместили ни одного релевантного HTML-кода и даже не показали, где вызывается showParagraphs ()!

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