当我的函数抛出错误时,防止完全JS停电?

时间:2012-01-22 08:44:30

标签: javascript jquery error-handling scroll

我只是不知道如何解决这个问题,这可能相当简单。 我编写了一个自定义滚动功能,只需将整个页面滚动到页面上某个元素的某个位置。

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;
  

未捕获的TypeError:无法读取null的属性“top”

如果发生错误,我的JS都不再有效。

如何解决这个问题,所以当我传递一个不存在的selector时,该函数不会抛出错误或只是不会被解雇?

任何想法,谢谢!

1 个答案:

答案 0 :(得分: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 + "]");
}