4

我们使用的 jQuery 版本是 1.10.2。

在特定屏幕上,我们使用 jQuery 获取 DOM 元素并尝试获取其 offset() 对象。有时对象可能不会显示,并且根据 jQuery 文档,在这种情况下不支持 offset()。

这一切都很好,但是,真正让我头晕目眩的是,为什么如果我尝试检查 offset() 对象是否不同于 undefined,代码总是在条件内?

我的代码(由于保密协议而简化)如下:

var isCurrent = $('.detail-current[value=\'true\']:first');
if (isCurrent != 'undefined') {
   var button = isCurrent.closest('.batch-item').find('.batch-item-top').find('input[name=\'edit\']');

   var myOffsetTop = 0;
   if(button.offset() != 'undefined')
      myOffsetTop = button.offset().top;

   $('html, body').animate({
      scrollTop: myOffsetTop - 50
   });
}

当我使用 IE 开发工具进行调试时,我在控制台上看到 button.offset() 未定义但 button.offset() != undefined 返回 true!

有谁知道为什么会发生这种情况以及我们如何最好地处理它?

谢谢你。

4

3 回答 3

10

您正在检查它是否是一个名为 的字符串undefined,而不是它是否实际上是未定义的。

if (typeof something === "undefined") 
  alert("something is undefined");

要检查它是否为 NULL,请使用if (null === something)

于 2013-07-09T20:01:34.383 回答
5

您需要检查关键字undefined,而不是字符串"undefined"

未定义的检查应如下所示:

if (someVar !== undefined)

然而——如果 jQuery 没有找到任何东西——它不会返回未定义的。它返回一个表示空集的 jQuery 对象。

因此,您的第一次检查应该使用该.length属性,如下所示:

if (isCurrent.length > 0)

offset(), 另一方面,如果没有定义,返回 undefined - 所以你的第二次检查应该是这样的:

if (button.offset() !== undefined)
于 2013-07-09T20:02:00.017 回答
0

你不是在测试未定义,它应该是

if(typeof button.offset() !== 'undefined')
于 2013-07-09T20:03:34.280 回答