jQuery — проблемы с IE9 (работает после открытия отладчика)

У меня есть одностраничный сайт, и я использую следующий код для прокрутки между страницами:

function gotoPage() {
        var cur = $(this);
        var role = cur.attr('role');
        var target = $('#' + role);

        $('html,body').animate({
          scrollTop: target.offset().top - 94
        }, 1000);
    }

$('.navBt').click(gotoPage);

HTML:

<div class="navBt" role="topSpacing">
    <img src="img/nav_campaign.png" />
</div>

<div class="navBt" role="sectionD">
    <img src="img/nav_club.png" />
</div>

Он отлично работает в любом браузере, кроме IE. Когда я открою его в IE9 (не уверен в других версиях), он не будет работать, но как только я нажму F12, чтобы открыть проверку, он начнет нормально работать с этого момента, даже если я обновлю страницу или снова зайду на страницу без проверки открыт.

Есть идеи, почему?


person Guy Aston    schedule 05.03.2015    source источник
comment
Как вы думаете, что представляет собой this? Это gotoPage(), а не элемент DOM, как вы думаете. Таким образом, $(this) оборачивает саму функцию, у которой нет атрибута role. Я думаю, что этот код просто не может работать так, как вы хотите.   -  person Jeremy Thille    schedule 05.03.2015
comment
@JeremyThille Не зная точного использования gotoPage, ваши предположения о значении this бесполезны :) Это может быть window или узел DOM, если gotoPage используется в качестве обработчика событий, или окружающий объект, или что-то еще, что было установлено через .apply() , .call(), .bind(), .proxy(),... - stackoverflow.com/questions/3127429/   -  person Andreas    schedule 05.03.2015
comment
отредактировано, я не думаю, что проблема в этом :) он отлично работает в любом другом браузере. если я не понял вас, я добавил вызывающего и HTML.   -  person Guy Aston    schedule 05.03.2015
comment
Это верно, но у меня есть только то, что дал нам ОП. Поэтому я предполагаю, что это просто функция, поскольку в коде нет абсолютно ничего другого. Если бы это был метод объекта, синтаксис был бы таким: gotoPage : function(){...}, поэтому он не ссылается на объект, частью которого является. В любом случае, это не элемент DOM.   -  person Jeremy Thille    schedule 05.03.2015


Ответы (1)


это очень похоже на проблему, которая у меня была давным-давно (только с IE):
вы используете console где-то в своем коде javascript? скорее всего console.log() ?

тогда у вас проблема, потому что в браузерах IE объект console javascript не существует, пока вы не откроете консоль разработки. поэтому будет какая-то ошибка javascript (которую вы не видите, потому что ваша консоль не открыта), которая останавливает выполнение остальной части вашего кода javascript.

это обходной путь, который я нашел:

if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };

просто поместите это в начало вашего кода javascript.
это создаст псевдообъект console и псевдометод log, поэтому ошибки не возникнут, когда ваш console закрыт.

person low_rents    schedule 05.03.2015
comment
рад, что смог помочь! - person low_rents; 05.03.2015