2011-11-21 86 views
0

我正在使用下面的方法来验证单选按钮必须被选中。javascript的奇怪行为&&

function validateForm(){ 
    var searchType = document.getElementsByName("form1:searchType"); 
    var a = !(searchType[0].checked); 
    var b = !(searchType[1].checked); 
    if(a&&b){ 
     alert('Please select search type'); 
     return false; 
    } 
    return true; 
} 

在上述方法中,searchType是单选按钮,它创建两个按钮。如果没有选中两个单选按钮,它会显示警告消息,但即使选择了第二个单选按钮,它也会显示警告消息。请任何想法吗?

+0

假设你的一个变种和VAR b线是否正常工作,你需要的,如果(!(A || B) ){ alert ... } –

+0

@ DotNetNukeLab:如果我使用if(!(a || b)){alet ..},那么即使没有选择任何单选按钮,也会显示警报消息。 – Adnan

+0

你确定这段代码不起作用吗?你可以多调试一下吗?例如在这些'var a =!....'东西后面加上一些提示... – duedl0r

回答

0
<html> 
<head> 
<script language="javascript"> 

function validateForm(){ 
    var searchType = document.getElementsByName("form1:searchType"); 
    var a = !(searchType[0].checked); 
    var b = !(searchType[1].checked); 
    if(a&&b){ 
     alert('Please select search type'); 
     return false; 
    } 
    return true; 
} 

</script> 


</head> 

<body> 

<form name="form1"> 

<input type="radio" name="form1:searchType" /> male 
<input type="radio" name="form1:searchType" /> female 
<input type="submit" name="submit" value="submit" onclick="validateForm()" > 

</form> 

</body> 
</html> 

我使用你的函数在这个代码和它的做工精细,它可以帮助你

0

您需要使用 运营商,而不是 - 使用 &&时,这将是只有当 两个条件 真实的 - 当其中一个 整个语句 false

所以,仅仅更改为:

if(a || b){ 
    alert('Please select search type'); 
    return false; 
} 

它应该做你想要什么。

编辑:抱歉,我自己与布尔逻辑混淆。

quick test您的代码确实按原样工作:只有在未勾选复选框时,才会显示警报。

请解释什么是问题和步骤重现在jsFiddle如果可能的话,我们会看到。

+0

错误,您可以将每个“或”运算符转换为“和”运算符,反之亦然。 – duedl0r

+0

@ duedl0r当然,我可以否定整个事情,但为了什么目的?为什么坚持使用'和'? –

+0

@shadow:即使其中一个单选按钮被选中,它也会显示警告消息。所以不适用。\ – Adnan