2011-09-23 22 views
1

我用這個功能,使的幫助框保持可見,當用戶向下滾動:重新使用jQuery的功能,而不會對頁面出錯不利用它

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

有沒有寫這個函數的方法,以便可以重用而不會導致錯誤?我想避免有選擇地包括它需要它的地方,因爲只是將這些包含在我的佈局中更容易。

+0

try-catch塊? – freakish

+0

@freakish,我想這應該是明顯的......我不認爲這是「正確的方式」去... – Mohamad

+1

爲什麼不呢?幾乎沒有人似乎使用try-catch,不知道爲什麼。它非常適合處理這種情況。這很簡單,快速並且完成這項工作。你不需要包裝你的代碼或使用許多奇怪的'if'語句。 – freakish

回答

2
var helpBox = $(".help-box"), top; 
if(helpBox !== null && helpbox != undefined && helpBox.length > 0) { 
    top = helpBox.offset(); 
} 

只需在調用函數之前檢查是否有幫助框。

+1

if(helpBox.length)也可以。 – ScottE

+0

已注意。儘管對於JSLint的有效性,首選的形式是'if(helpBox.length!== 0)' – Jay

+0

@Jayraj,這很有趣。這似乎並不奏效。它仍然會給出同樣的錯誤。腳本'if(helpBox!=== null)'總是評估真值... – Mohamad

1

放入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) 
{ 
} 
1
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()} 
相關問題