我一直试图验证是否选择了无线电按钮,因此显示警报。好吧,我发现了错误(我把条件语句放在循环中)。
即使我解决了这个问题,我也无法弄清楚为什么我的代码在循环之外正常工作但在其中无效。现在我坚持这个。
我很感激,如果有人能告诉我是什么原因。
下面你会看到两个JS代码,但在这里你有一些小问题:
这是不起作用的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)
}
}
答案 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...")
有机会触发。