我在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";
}
任何人都可以为什么?
注意:正如我之前所说,所有使用局部变量但未将其设置为全局变量。
答案 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变量,如果在函数内声明,则只能是在函数内部使用,或者如果在函数外部声明它,除非将变量传递给函数,否则无法在函数内访问它。
希望有所帮助!