2

我有这个代码:

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
}
});

我在 test1 和 test2 中添加了 lol 类,并尝试使用 id 框更改 div 的背景。简而言之:我需要检查两个复选框是否被标记,如果它们被标记并做一些事情,并且如果它们被标记得更早,它们已经被检查过。

4

2 回答 2

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() 方法,该方法没有分配配额。

于 2013-09-24T12:26:41.050 回答
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;
于 2013-09-24T12:03:46.113 回答