JavaScript的全局变量在功能和.hover
我有这样的代码在JavaScript:JavaScript的全局变量在功能和.hover
status = document.getElementById('status2');
$('#slider > img').hover(
function() {
stopLoop();
status.innerHTML = "paused";
},
function() {
startSlider();
status.innerHTML = "playing";
}
);
,我找都在我的HTML有ID滑块,当我悬停,然后我要添加图像一个字(暂停或播放)到id为status2的span标签。但我不知道为什么全局变量不工作,我做它的工作是把一个局部变量每个funcion内像这样的唯一途径:
function() {
stopLoop();
var status = document.getElementById('status2');
status.innerHTML = "paused";
},
function() {
startSlider();
var status = document.getElementById('status2');
status.innerHTML = "playing";
}
任何人都可以我为什么?
注意:正如我之前所说的所有使用局部变量但不将其设置为全局变量。
因为到那时你跑那么你得到的地位不确定,所以它不会进一步工作
status = document.getElementById('status2');
DOM还没有准备好。
因此,要么将代码放在ready
$(document).ready(function(){
//code goes here
})
或
把脚本在文件末尾。
不要添加在
$(document).ready(function(){
});
此等待,直到一切都已经完成加载到内执行代码。这样它不应该返回undefined。
ALSO
我不禁注意到,你似乎在试图给多个项目相同的ID。
请勿为多个元素使用ID。这不是他们如何设计使用,也不是以这种方式工作。如果您给多个元素使用相同的ID,然后尝试使用CSS对其进行样式设置,则只会对第一个元素进行样式设置。使用一堂课。如果您使用
document.getElementById();
,试图抓住具有相同ID的多个元素,则脚本只能抢到第一元素与ID,因为,因为它是一个ID,它希望只有一个元素。如果要使用多个元素,请使用类,然后使用
document.getElementsByClassName();
这将抓取具有该类的所有元素。例如, 表示您有四个带“foo”类的span元素。要抓住所有这些和更改文本,这样做:
elements=document.getElementsByClassName("foo");
for (i=0; i<elements.length; i++){
elements[i].innerHTML='insert your text here';
}
关于全局和局部变量,全局变量声明是这样的:
global_variable='foo'
和局部变量声明是这样的:
var local_variable='foo'
一个全局变量可以在脚本中任何声明,并可以在脚本中使用的任何地方(甚至在被连接到相同的HTML文件的其他脚本),而本地瓦里如果在函数内声明,只能在函数内部使用,或者如果在函数外部声明它,则除非将该变量传递给该函数,否则不能在该函数内进行访问。
希望有帮助!
因为在你运行'status = document.getElementById('status2')的时候''DOM没有准备好,所以你把'status'设置为'undefined',所以它不会进一步工作 – vinayakj
你说你看所有图像的ID为'slider',但是你的代码检查图像,这些图像是id为'slider'的元素的直接子元素。也许[本页](https://css-tricks.com/child-and-sibling-selectors/)更好地解释它? ID为“滑块”的图像被用'$(“IMG#滑块”)'选择,而与ID为“滑块”元素的图像的儿童用'$(“#滑块> IMG”)来选择。 – FWDekker
如果你愿意,你可以去完整的jQuery并使用'var status = $(“status2”);''''和'status.html(“playing”);'。 – Anders