为什么我不能多次使用具有相同ID的getElementById?

时间:2013-09-24 11:57:20

标签: javascript jquery html

我有这段代码:

if(document.getElementById('test1').checked){
    document.getElementById('next1').disabled = false;
}
else{
    document.getElementById('next1').disabled = true;
}
if(document.getElementById('test2').checked){
    document.getElementById('next2').disabled = false;
}
else{
    document.getElementById('next2').disabled = true;
}   

当我尝试添加:

if(document.getElementById('test1').checked && document.getElementById('test2').checked){
    document.getElementById('next3').disabled = false;
}
else{
    document.getElementById('next3').disabled = true;

它不起作用。我猜那是因为我已经使用了document.getElementById('test1')和document.getElementById('test2')。我的问题是为什么我不能再次使用它,有什么方法可以使它工作?我也试过这个(没用):

$(".lol").change(function(){ 
if ($('.lol:checked').length == $('.lol').length) {
    $("#box").css('background-image', 'url("grey.png")'); //example
} else {
    $("#box").css('background-image', 'url("red.png")'); //example
}
});

我将lol类添加到test1和test2并尝试使用id框更改div的背景。简而言之:我需要检查是否标记了两个复选框,如果它们是否存在则执行某些操作,如果它们之前已标记,则已经检查过它们。

2 个答案:

答案 0 :(得分:5)

首先,一个好的做法是,如果您要多次使用元素引用,请将其分配给变量。

以下是上述代码的简化......

/* If you're going to use a single element multiple
 * times, it's best to assign it to a variable, the 
 * getElementById() method has to search the DOM every
 * time.
 */
var test1 = document.getElementById("test1"),
    test2 = document.getElementById("test2"),
    next1 = document.getElementById("next1"),
    next2 = document.getElementById("next2"),
    next3 = document.getElementById("next3");
next1.disabled = !test1.checked;
next2.disabled = !test2.checked;
next3.disabled = !(test1.checked && test2.checked);

修改 我的咖啡因被剥夺了大脑忘记解决原来的问题...... 您可以根据需要多次使用getElementById()方法,但没有为该方法分配配额。

答案 1 :(得分:3)

没有这样的限制

你可以多次调用getElementById,它会起作用。你的问题在别处。

此代码:

if(document.getElementById('test1').checked){
    document.getElementById('next1').disabled = false;
}
else{
    document.getElementById('next1').disabled = true;
}

可缩短为:

document.getElementById('next1').disabled = !document.getElementById('test1').checked;