繁体   English   中英

函数和.hover中的JavaScript全局变量

[英]JavaScript global variable in function and .hover

我在JavaScript中有以下代码:

status = document.getElementById('status2');

$('#slider > img').hover(
    function() {
        stopLoop();
        status.innerHTML = "paused";
    }, 
    function() {
        startSlider();
        status.innerHTML = "playing";
    }
);

在我的html中查找具有id滑块的所有图像,当我将鼠标悬停在上面时,我想向具有id status2的span标签添加一个单词(已暂停或正在播放)。 但是我不知道为什么全局变量不起作用,使它起作用的唯一方法是将局部变量放入每个函数中,如下所示:

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尚未准备就绪,因此您的状态为未定义,因此它将无法进一步工作。

所以要么把代码准备好

$(document).ready(function(){
   //code goes here
})

要么

将脚本放在文件末尾。

一定要添加

$(document).ready(function(){

});

这将等待执行内部代码,直到所有内容加载完成。 这样,它不应该返回未定义的。

我忍不住注意到您似乎要为多个项目赋予相同的ID。

请勿将ID用于多个元素。 那不是设计它们使用的方式,也不是那样工作。如果给多个元素相同的ID,然后尝试使用CSS设置样式,则只会设置第一个样式。 使用课程。 如果您使用

document.getElementById();

要尝试获取具有相同ID的多个元素,则脚本将仅获取具有该ID的FIRST元素,因为给定它是一个ID,因此它仅预期一个元素。 如果要使用多个元素,请使用一个类,然后使用

document.getElementsByClassName();

这将获取该类的所有元素。 例如,假设您有四个span元素,其类为“ foo”。 要抓住所有这些并更改文本,请执行以下操作:

 elements=document.getElementsByClassName("foo");
for (i=0; i<elements.length; i++){
elements[i].innerHTML='insert your text here';
}

关于全局和局部变量,以这种方式声明GLOBAL变量:

global_variable='foo'

并以这种方式声明局部变量:

var local_variable='foo'

全局变量可以在脚本中的任何位置声明,也可以在脚本中的任何位置使用(甚至在附加到同一HTML文件的其他脚本中),而局部变量(如果在函数中声明)只能在内部使用。函数,或者如果您在函数外部声明它,除非将变量传递给它,否则无法在函数内对其进行访问。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM