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

时间:2015-07-21 21:25:28

标签: javascript jquery html

我在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";
}

任何人都可以为什么?

注意:正如我之前所说,所有使用局部变量但未将其设置为全局变量。

2 个答案:

答案 0 :(得分:1)

因为当你跑步时

status = document.getElementById('status2');

DOM没有准备就绪,因此您将状态视为未定义,因此无法继续工作。

所以要么把代码放在ready

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

将脚本放在文件末尾。

答案 1 :(得分:1)

添加

private Palette palette;
private DropDownChoice<String> select;

...

select.add(new AjaxFormComponentUpdatingBehavior("onchange") {

    @Override
    protected void onUpdate(AjaxRequestTarget target) {

        palette.setObject(// your list of selected items // );

        target.add(palette);
    }

等待内部执行代码直到所有内容都加载完毕。这样它不应该返回undefined。

ALSO

我忍不住注意到你似乎试图给多个项目提供相同的ID。

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

$(document).ready(function(){

});

尝试使用相同的ID来获取多个元素,然后脚本将仅使用该ID获取FIRST元素,因为,鉴于它是一个ID,它只需要一个元素。如果要使用多个元素,请使用类,然后使用

document.getElementById();

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

document.getElementsByClassName();

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

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

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

global_variable='foo'

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

希望有所帮助!