我意识到这不是一个新主题,而且之前已被问过。我已经阅读了各种答案,尽管我在Javascript方面做得越来越好,但我对大多数答案感到困惑。
我要求我的用户给出评级,他们对某个类别和公司进行评级。我希望Javascript验证两组单选按钮都有一个标记的答案,如果可能的话,根据未标记的那个提供单独的警报。
我的代码(省略它们包含的表格)
<form action="blah.php" method="post" onsubmit="return validaterating()"
name="ratings">
<input type="radio" name="categoryrate" value="5">
<input type="radio" name="categoryrate" value="4">
<input type="radio" name="categoryrate" value="3">
<input type="radio" name="categoryrate" value="2">
<input type="radio" name="categoryrate" value="1">
<input type="radio" name="companyrate" value="5">
<input type="radio" name="companyrate" value="4">
<input type="radio" name="companyrate" value="3">
<input type="radio" name="companyrate" value="2">
<input type="radio" name="companyrate" value="1">
</form>
使用Javascript:
function validaterating() {
var rate1 = document.forms.ratings.categoryrate;
var rate2 = document.forms.ratings.companyrate;
function validaterating() {
for (var i=0; i < rate1.length; i++) {
if (rate1[i].checked)
return true;
}
alert("Please rate the category.");
return false;
}
现在,我知道这可以验证我拥有的第一个评级,并且是我觉得对我最有意义的验证设置。但是,我无法得到第二个问题(rate2)来验证。我已经尝试了另一个for循环,使用&amp;&amp;运算符,当我试图让第二个验证时它停止工作。在我编写代码时使用代码,这怎么可能?
感谢您的时间。
答案 0 :(得分:1)
HTML
<form onsubmit="return test();" action="blah.php" method="post" name="ratings">
category:
<input type="radio" name="categoryrate" value="5">
<input type="radio" name="categoryrate" value="4">
<input type="radio" name="categoryrate" value="3">
<input type="radio" name="categoryrate" value="2">
<input type="radio" name="categoryrate" value="1">
company:
<input type="radio" name="companyrate" value="5">
<input type="radio" name="companyrate" value="4">
<input type="radio" name="companyrate" value="3">
<input type="radio" name="companyrate" value="2">
<input type="radio" name="companyrate" value="1">
<input type='submit' />
</form>
的JavaScript
function test(){
var category = document.getElementsByName("categoryrate");
var check1 = 0;
for(i=0;i<category.length;i++){
if(category[i].checked){
check1++;
break;
}
}
var company = document.getElementsByName("companyrate");
var check2 = 0;
for(i=0;i<company.length;i++){
if(company[i].checked){
check2++;
break;
}
}
if(check1 && check2){
}else{
alert("you must select ratings for both company and category");
return false;
}
}
答案 1 :(得分:0)
这是用于验证两组单选按钮的所有JavaScript吗?首先,您有两个具有相同名称的功能(验证)。其次,您忘记在末尾添加一个结束括号以关闭包装函数。
你应该做的是设置两个变量,它们都作为布尔标志。然后遍历每组单选按钮以确定是否已选择按钮。如果是这样,请将相应的标志设置为true,否则设置为false。然后在最后,测试两个标志是否都设置为true。如果没有,请抛出警报。
答案 2 :(得分:0)
function validaterating(){
var rate1 = document.forms.ratings.categoryrate; var rate2 = document.forms.ratings.companyrate;
function validaterating(){ for(var i = 0; i&lt; rate1.length; i ++){ if(rate1 [i] .checked) 返回true; } 警报(“请评价该类别。”); 返回false; }
此代码有很多语法错误。我不确定为什么有两个验证评级功能。我现在要假设你把它们复制错了,你的代码确实有效。
这里的问题是你在rate1中找到一个后返回true。如果您之后有任何代码验证rate2,它将不会被命中,因为该函数已经返回。
一种解决方案可能是创建两个布尔变量categoryChecked,companyChecked,并将它们初始化为false。然后,循环遍历每个i的document.forms.rating.categoryrate [i] .checked,如果其中任何一个为真,则设置categoryChecked = true。对于companyChecked也这样做。
然后,用
结束return categoryChecked && companyChecked
答案 3 :(得分:0)
你可以这样做:
function validaterating() {
return validateGroup(document.getElementsByName("categoryrate")) && validateGroup(document.getElementsByName("companyrate"))
}
function validateGroup(elements) {
for (var i = 0; i < elements.length; i++) {
if (elements[i].checked) return true;
}
return false;
}
答案 4 :(得分:-1)
function validateForm() {
var radios = document.getElementsByTagName('input');
var value;
var sum_radio=0;
var formValid=0;
for (var c = 0; c < radios.length; c++){
if (radios[c].type =='radio'){
sum_radio = sum_radio + 1;
}
}
alert('count radio'+sum_radio);
for (var i = 0; i < radios.length; i++) {
if (radios[i].type == 'radio' && radios[i].checked) {
// get value, set checked flag or do whatever you need to
value = radios[i].value;
// alert('value'+value);
alert('good'+formValid);
formValid = formValid + 1;
}
}
if (formValid==sum_radio){
alert('yes');
return true;
}else{
alert('no');
return false
}
}
<form name="form1" action="#" onsubmit="return validateForm()" method="post">
First time visitor?:<br/>
<label for="s1">Yes</label>
<input type="radio" id="radio0" name="yesno" value="1"/>
<br/>
<label for="s2">No</label>
<input type="radio" id="radio1" name="yesno1" value="2"/>
<br/>
<label for="s2">No</label>
<input type="radio" id="radio2" name="yesno2" value="2"/>
<br/>
<label for="s2">No</label>
<input type="radio" id="radio3" name="yesno3" value="2"/>
<br/>
<label for="s2">No</label>
<input type="radio" id="radio4" name="yesno4" value="2"/>
<br/>
<label for="s2">No</label>
<input type="radio" id="radio5" name="yesno5" value="2"/>
<br/>
<input type="submit" value="Submit"><br/>
</form>