2012-01-22 2 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 { 
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 + "]"); 
} 
try/catchブロックを使用します
関連する問題