我们使用的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 !!
有人知道为什么会这样,以及我们如何才能最好地处理它?</ p>
谢谢。
答案 0 :(得分:10)
您正在检查它是否是名为undefined
的字符串,而不是它是否实际上未定义。
if (typeof something === "undefined")
alert("something is undefined");
要检查它是否为NULL,请使用if (null === something)
答案 1 :(得分:5)
您需要检查关键字undefined
,而不是字符串"undefined"
。
对undefined的检查应如下所示:
if (someVar !== undefined)
然而 - 如果jQuery没有找到某些东西 - 它不会返回undefined。它返回一个表示空集的jQuery对象。
因此,您的首次检查应使用.length
属性,如下所示:
if (isCurrent.length > 0)
offset()
,另一方面确实如果没有定义则返回undefined - 所以你的第二次检查应如下所示:
if (button.offset() !== undefined)
答案 2 :(得分:0)
你没有测试undefined,它应该是
if(typeof button.offset() !== 'undefined')