Javascript jQuery$(this).position().top在Chrome中不工作

Javascript jQuery$(this).position().top在Chrome中不工作,javascript,jquery,google-chrome,Javascript,Jquery,Google Chrome,我想知道是否有任何理由这段代码不能工作 top = $(this).find('ul').position().top; 它在IE、Firefox和Safari中工作,但是当我在Chrome中警告输出时,它会显示DOM窗口对象。。。我需要一个整数。为什么它会向DOM窗口对象发出警报?您确定您真的在向top发出警报吗?回想一下,top是浏览器托管JavaScript中预先存在的全局变量(它是window.top,顶级窗口) 更新:有趣的是,Chrome不会让你隐式覆盖top(这可能是一件好事):

我想知道是否有任何理由这段代码不能工作

top = $(this).find('ul').position().top;

它在IE、Firefox和Safari中工作,但是当我在Chrome中警告输出时,它会显示DOM窗口对象。。。我需要一个整数。为什么它会向DOM窗口对象发出警报?

您确定您真的在向
top
发出警报吗?回想一下,
top
是浏览器托管JavaScript中预先存在的全局变量(它是
window.top
,顶级窗口)

更新:有趣的是,Chrome不会让你隐式覆盖
top
(这可能是一件好事):。只需在代码所在的函数中声明变量(无论如何都是一个好主意)(该代码在函数中,对吗?)即可,这样就可以了:。例如:


声明变量是很重要的,这样可以避免成为问题的牺牲品。正如您在本例中发现的,避免使用全局变量总是最好的,因为如果您声明它(再次保护
window.top
),Chrome甚至不允许您使用
top
作为全局变量。

请确保您将值分配给一个局部范围的变量。使用
var
关键字

var top = $(this).find('ul').position().top;

对不起,我不知道Javascript,我只是用JavaScript来处理,因为它类似于C++和java,jQuery是相当直接的,但是现在我知道我会尝试改变变量名…谢谢you@Travis:(不需要道歉。)不用担心,很高兴这有帮助。但不要只是更改变量名,还要声明变量。如果你不这样做,你就成了受害者。你真的不想那样做。:-)此外,要注意JavaScript只与C++和java语法类似。除此之外,这是非常非常不同的(甚至
这个
意味着完全不同)。它们是声明的,它们只是全局声明的,所以我认为这是问题的一部分…这是我开始处理的第一个脚本,最初的作者在全局声明了一个脚本,我知道这是一个糟糕的做法,因此,如果可以将变量传递到函数中,我将在以后找出如何修改它。所以,是的,坐在顶端的是var top=0@特拉维斯:啊,好的。是的,这将是一个很好的例子,说明为什么避免全局变量是最好的选择。:-)很好的建议,我使用的是一个全球性的,但我认为它与T.J.Crowder所说的有关,因为我更改了它的名称,它可以工作,所以它确实有助于在本地范围内使用它。
var top = $(this).find('ul').position().top;