Повторное использование функции jQuery без возникновения ошибки на страницах, которые ее не используют - PullRequest
1 голос
/ 24 сентября 2011

Я использую эту функцию, чтобы окно справки оставалось видимым, когда пользователь прокручивает страницу вниз:

var top = $('.help-box').offset().top - parseFloat($('.help-box').css('marginTop').replace(/auto/, 0));
$(window).scroll(function (event) {
    var y = $(this).scrollTop();
    if (y >= top) {
        $('.help-box').addClass('fixed');
    } else {
        $('.help-box').removeClass('fixed');
    }
});

Я хочу повторно использовать его на нескольких страницах, поэтому я включил его в свой макет (при каждой загрузке страницы). Теперь проблема в том, что я получаю сообщение об ошибке на страницах, на которых нет поля справки: $(".help-box").offset() is null

Есть ли способ написать эту функцию, чтобы ее можно было использовать повторно, не вызывая ошибки? Я хочу избегать выборочного включения, где это необходимо, так как проще просто оставить включение в моем макете.

Ответы [ 3 ]

2 голосов
/ 24 сентября 2011
var helpBox = $(".help-box"), top;
if(helpBox !== null && helpbox != undefined && helpBox.length > 0) {
    top = helpBox.offset();
}

Просто проверьте, есть ли у вас окно справки, прежде чем вызывать функцию.

1 голос
/ 24 сентября 2011
    var helpBox = $('.help-box');

    function initHelpBox(){
      var top = helpBox.offset().top - parseFloat(helpBox.css('marginTop').replace(/auto/, 0));
    $(window).scroll(function (event) {
        var y = $(this).scrollTop();
        if (y >= top) {
            helpBox.addClass('fixed');
        } else {
            helpBox.removeClass('fixed');
        }
    });
    }

 if (helpBox.length){initHelpBox()}
1 голос
/ 24 сентября 2011

Поместите все в блок try-catch:

try
{
var top = $('.help-box').offset().top - parseFloat($('.help-box').css('marginTop').replace(/auto/, 0));
$(window).scroll(function (event) {
    var y = $(this).scrollTop();
    if (y >= top) {
        $('.help-box').addClass('fixed');
    } else {
        $('.help-box').removeClass('fixed');
    }
});
}
catch(err)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...