Javascript JS验证,为什么这段代码赢了´;不行?

Javascript JS验证,为什么这段代码赢了´;不行?,javascript,validation,Javascript,Validation,我无法在JS中获得验证,也不明白为什么它不起作用。 如果至少有一个复选框未选中,则用户应收到警报。 它不起作用,因为即使未选中任何复选框,表单也会正常提交 <body> <script> function validar() { var s1=document.getElementById('s1'); var s2=document.getElementById('s2'); if (s1.value==''||s2.value=='') { alert("Y

我无法在JS中获得验证,也不明白为什么它不起作用。 如果至少有一个复选框未选中,则用户应收到警报。 它不起作用,因为即使未选中任何复选框,表单也会正常提交

<body>
<script>
function validar()
{
var s1=document.getElementById('s1');
var s2=document.getElementById('s2');

if (s1.value==''||s2.value=='')
  {
  alert("You must check at least one!");
  return false;
  }
}
</script>

<form name="calcular" onsubmit="return validar()" method="post">
<input type ="checkbox" name="servicios[]" id="s1" value="sinservicios">Sin servicios<br>
<input type ="checkbox" name="servicios[]" id="s2" value="dosservicios">Dos servicios<br>

...

函数validar()
{
var s1=document.getElementById('s1');
var s2=document.getElementById('s2');
如果(s1.值=“”| | s2.值=“”)
{
警告(“您必须至少检查一个!”);
返回false;
}
}
Sin servicios
Dos servicios
...
您可以尝试使用
checked
属性来确保至少选中了两个复选框中的一个:

<script>
    function validar() {
        var s1 = document.getElementById('s1');
        var s2 = document.getElementById('s2');

        if (!s1.checked && !s2.checked) {
            alert('You must check at least one!');
            return false;
        }
        return true;
    }
</script>

函数validar(){
var s1=document.getElementById('s1');
var s2=document.getElementById('s2');
如果(!s1.checked&!s2.checked){
警报('您必须至少检查一个!');
返回false;
}
返回true;
}
还要注意,如果验证成功,我们应该返回
true


代码不起作用的原因是您使用了
属性。无论用户是否选中此复选框,它都会返回复选框的
属性(
sinservicios
dosservicios
)。它永远不会返回一个空字符串,这是您在
if
条件下似乎要测试的字符串。

您可以尝试使用
checked
属性来确保至少选中了两个复选框中的一个:

<script>
    function validar() {
        var s1 = document.getElementById('s1');
        var s2 = document.getElementById('s2');

        if (!s1.checked && !s2.checked) {
            alert('You must check at least one!');
            return false;
        }
        return true;
    }
</script>

函数validar(){
var s1=document.getElementById('s1');
var s2=document.getElementById('s2');
如果(!s1.checked&!s2.checked){
警报('您必须至少检查一个!');
返回false;
}
返回true;
}
还要注意,如果验证成功,我们应该返回
true


代码不起作用的原因是您使用了
属性。无论用户是否选中此复选框,它都会返回复选框的
属性(
sinservicios
dosservicios
)。它永远不会返回一个空字符串,这是您在
if
条件下测试的内容。

定义
不起作用。
。对此表示抱歉(但我想不需要-1票)。我已经编辑了这个问题:它不起作用,因为如果没有复选框,表单可以提交。Define
不起作用
。对此我很抱歉(但我想不需要-1票)。我编辑了这个问题:它不起作用,因为如果没有复选框就是复选框,表单就可以提交了。说明正确方法的代码示例不需要太多解释。一个代码示例总是值百分之一百个字(当然还有像您这样的注释)。@RosamundaRosamunda在您的示例中,复选框的
值将是相同的,无论复选框是否选中。选中复选框不会更改值。例如,
s1
值将始终返回“sinservicios”。您不想要值,而是想要选中状态。@RosamundaRosamunda,您的方法有两个问题。第一个问题是代码不一致。如果验证失败,则返回
false
,但在哪里返回
true
?此外,您正在使用
属性。您是否注意到复选框的
属性?这就是你将得到的,无论复选框是否被选中。你永远不会得到一个空字符串,这是你似乎要测试的对象。您还意识到javascript中的
|
&
操作符之间的区别吗?即使
.value
返回空字符串,您的代码。。。。。。因为您正在测试是否选中了这两个复选框中的至少一个复选框,而根据您的要求,必须选中这两个复选框才能通过验证。说明正确方法的代码示例不需要太多解释。一个代码示例总是值百分之一百个字(当然还有像您这样的注释)。@RosamundaRosamunda在您的示例中,复选框的
值将是相同的,无论复选框是否选中。选中复选框不会更改值。例如,
s1
值将始终返回“sinservicios”。您不想要值,而是想要选中状态。@RosamundaRosamunda,您的方法有两个问题。第一个问题是代码不一致。如果验证失败,则返回
false
,但在哪里返回
true
?此外,您正在使用
属性。您是否注意到复选框的
属性?这就是你将得到的,无论复选框是否被选中。你永远不会得到一个空字符串,这是你似乎要测试的对象。您还意识到javascript中的
|
&
操作符之间的区别吗?即使
.value
返回空字符串,您的代码。。。。。。因为您正在测试是否选中了这两个复选框中的至少一个,所以无法工作,而根据您的要求,必须选中这两个复选框才能通过验证。