Javascript 单选按钮验证:我可以验证它,但我无法找出原因

Javascript 单选按钮验证:我可以验证它,但我无法找出原因,javascript,validation,radio-button,Javascript,Validation,Radio Button,我一直试图验证是否选择了单选按钮,结果显示警报。我发现了错误(我把条件语句放在循环中) 即使我解决了这个问题,我也不明白为什么我的代码在循环外正常工作,但在循环内却不工作。现在我被这件事缠住了 如果有人能告诉我原因,我将不胜感激 下面您将看到这两个JS代码,但这里有fiddles示例: 这是不起作用的JS代码: var getForm = document.getElementById('formX'); var putForm = getForm.onsubmit = showIt; f

我一直试图验证是否选择了单选按钮,结果显示警报。我发现了错误(我把条件语句放在循环中)

即使我解决了这个问题,我也不明白为什么我的代码在循环外正常工作,但在循环内却不工作。现在我被这件事缠住了

如果有人能告诉我原因,我将不胜感激

下面您将看到这两个JS代码,但这里有fiddles示例:

这是不起作用的JS代码:

var getForm = document.getElementById('formX');
var putForm = getForm.onsubmit = showIt;

function showIt(){

  var getNames = document.getElementsByName('season');

  var result = false;
  for(var i = 0; i < getNames.length; i++){
    if(getNames[i].checked){
      result = true;
      break;
    } 
    if(result === false){
      alert('Please, choose an option');
      return false;
      }else{
        alert('You\'ve choosen ' + getNames[i].value)  
      } 
  }//Loop ends here.

}
var getForm=document.getElementById('formX');
var putForm=getForm.onsubmit=showIt;
函数showIt(){
var getNames=document.getElementsByName('seasure');
var结果=假;
对于(var i=0;i
这是一段JS代码,可以毫无问题地工作:

var getForm = document.getElementById('formX');
var putForm = getForm.onsubmit = showIt;

function showIt(){

  var getNames = document.getElementsByName('season');

  var result = false;
  for(var i = 0; i < getNames.length; i++){
    if(getNames[i].checked){
      result = true;
      break;
    } 

  }//Loop ends here.
  if(result === false){
      alert('Please, choose an option');
      return false;
  }else{
    alert('You\'ve choosen ' + getNames[i].value)  
  }
}
var getForm=document.getElementById('formX');
var putForm=getForm.onsubmit=showIt;
函数showIt(){
var getNames=document.getElementsByName('seasure');
var结果=假;
对于(var i=0;i
这是因为你的
休息

当它在循环中时,在它有机会命中以下代码之前,您将在true上打破它:
if(result==false)

break
打破了整个循环,这意味着如果(result==false)


希望有帮助

也许JS代码中不起作用的for循环有错误的逻辑,这意味着如果第一个单选按钮被选中,for循环就会停止;如果第一个单选按钮未选中,它将提示“请选择一个选项”,并停止for循环。该逻辑仅验证第一个单选按钮。也许这就是问题所在。

如果你的问题是我如何让它工作,那么答案中有几个好的建议


如果你想知道:“为什么第一种方法不起作用?”最好的答案是
中断行导致循环立即终止,因此阻止了
警报(“您已选择…”)
触发。

循环内的逻辑错误,请尝试以下操作:

var getForm = document.getElementById('formX');
var putForm = getForm.onsubmit = showIt;

function showIt(){

  var getNames = document.getElementsByName('season');

  var result = false;
  for(var i = 0; i < getNames.length; i++){
    if(getNames[i].checked){
      alert('You\'ve chosen ' + getNames[i].value)
      result = true
    } 
    if (i == getNames.length - 1 && !result)
    {
        alert('Please, choose an option')
    }
  }

}
var getForm=document.getElementById('formX');
var putForm=getForm.onsubmit=showIt;
函数showIt(){
var getNames=document.getElementsByName('seasure');
var结果=假;
对于(var i=0;i
是的,正如我的回答所述。很明显,它是“return false”,但这是正确的。唯一不起作用的时候是当你选择冬季,它跳过了
警报(“你选择了…”)
BRogers,我投票支持你,但我没有足够的代表评论你的意见,所以我做了我自己的回答来支持你yours@Leo我想我明白你的意思了,如果总是在循环外执行最后一行,会更干净。。。但问题并不是要找到一个解决方案来让它发挥作用,而是要问为什么第一种方式不起作用,最好的答案是他把
break
包含进去,这会导致意想不到的后果behavior@msanteler-没问题:)-谢谢。无论如何狮子座。。。你没有完整地阅读这个问题。他想知道为什么当他把它从循环中拉出来时它会起作用。这是因为
中断请参阅下面的答案,希望能有所帮助。您曾问过,当您做您所做的事情时,为什么它会起作用。它的答案是打破声明,有其他人同意的原因。如果没有,请在
javascript
中查找
break
在循环中的作用。重要的一点是,我们坚持你的实际问题。@BRogers谢谢你的帮助。我已经意识到,如果我在循环中使用
break
,就像在if语句中“转换”循环一样(类似于这样)。这加上警报的条件语句是错误的。没问题,我很高兴看到您正在试图理解它为什么工作,而不是继续!只有在取消选中所有框的情况下,我才尝试获取
警报('Please,choose')
。现在我知道怎么做了。谢谢