2012-01-22 42 views
2

我只是不知道如何解決這個問題,它可能相當簡單。 我寫了一個自定義滾動功能,可以將整個頁面滾動到頁面上元素的某個位置。當我的函數拋出一個錯誤時,防止完成JS停電?

function scroll(selector, animate, viewOffset) { 

     pageOffset = selector.offset(); 
     scrollPos = pageOffset.top - viewOffset; 

     if (animate) { 
      $('html, body').animate({ scrollTop : scrollPos + 'px' }, { 
       duration: '500', 
       easing: 'easeInOutExpo' 
      }); 
     } else { 
      $('html, body').scrollTop(scrollPos); 
     } 

    } 

因此,我調用該函數這樣的... scroll($('#something'), true, 30); 此功能的作品真的很好,但是如果一個selector是沿着傳遞不存在,當然功能引發以下錯誤......

pageOffset = selector.offset(); 
scrollPos = pageOffset.top - viewOffset; 

Uncaught TypeError: Cannot read property 'top' of null

如果發生這種錯誤,我的JS都無法工作了。

如何解決這個問題,所以當我傳遞一個沒有的selector該函數不會拋出錯誤或只是不會被解僱?

任何想法,謝謝!

回答

4

使用try/catch塊

try { 
pageOffset = selector.offset(); 
scrollPos = pageOffset.top - viewOffset; 
} catch(e) { 
    //error objects typically contain a .name & .message property 
    var name = ""; 
    if (e.hasOwnProperty("name")) { 
    name = e.name; //super-defensive 
    } 

    var message = ""; 
    if (e.hasOwnProperty("message")) { 
    message = e.message; //super-defensive 
    } 

    console.log("Error occurred - " + name + " [" + message + "]"); 
} 
相關問題