单选按钮验证:我可以验证它,但我不知道原因

Radio Button Validation: I could validate it but I cant figure out the reason

本文关键字:验证 我不知道 我可以 单选按钮      更新时间:2023-09-26

我在尝试验证是否选择了单选按钮时遇到了问题,因此会显示警报。好吧,我发现了错误(我把条件语句放在循环中)。

即使我解决了这个问题,我也不明白为什么我的代码在循环外能正常工作,但在循环内却不能工作。现在我陷入了困境。

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

下面你会看到两个JS代码,但这里有一些麻烦的例子:

JSFiddle不起作用

工作于的JSFiddle

这是不起作用的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.
}

这是一个没有问题的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)  
  }
}

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

这是因为您的break;行。

当它在循环中时,在它有机会达到以下代码之前,你就把它分解为true:if(result === false)

break正在突破整个循环,这意味着它永远不会击中你的if(result===false)

希望能有所帮助!

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

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

如果你的问题是我如何让它发挥作用,答案中有几个很好的建议。

如果你想知道:"为什么使用第一种方法不起作用?"最好的答案是break;行导致循环立即终止,从而阻止alert("You've chosen...")有机会触发。