单选按钮验证:我可以验证它,但我无法弄清楚原因

时间:2013-12-16 01:58:50

标签: javascript validation radio-button

我一直试图验证是否选择了无线电按钮,因此显示警报。好吧,我发现了错误(我把条件语句放在循环中)。

即使我解决了这个问题,我也无法弄清楚为什么我的代码在循环之外正常工作但在其中无效。现在我坚持这个。

我很感激,如果有人能告诉我是什么原因。

下面你会看到两个JS代码,但在这里你有一些小问题:

JSFiddle that doesn't work

JSFiddle that works

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这是因为你的break;行。

当它在循环中时,你会在它有机会点击以下代码之前将其分解为真:if(result === false)

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

希望有所帮助!

答案 2 :(得分:0)

循环中的逻辑错误,试试这个:

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

}

答案 3 :(得分:-1)

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

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