我是javascript的新手,我想验证嵌套(重复)单选按钮。我希望如此提交onsubmit如果未检查卷上的一个组,浏览器应该提示用户。请问我该如何编写代码?
<form id="form1" name="form1" method="post" action="super4_engine.asp" >
<table width="442" border="0" align="left" cellpadding="3" cellspacing="3">
<tr>
<td colspan="6" bgcolor="#50B2FF"><div align="center"><strong>Set 1</strong></div></td>
</tr>
<% Dim counter
While ( ( Repeat1__numRows <> 0 ) AND ( NOT rs_set1.EOF ) )
counter = counter + 1
%>
<tr>
<td width="20" bgcolor="#FFCCFF"><input type="radio" name="team<%=counter%>" id="radio" value="<%=(rs_set1.Fields.Item("team1").Value)%>" /></td>
<td width="126" bgcolor="#FFCCFF"><%=(rs_set1.Fields.Item("team1").Value)%>
<input name="super<%=counter%>" type="hidden" id="super<%=counter%>" value="<%=(rs_set1.Fields.Item("game_id").Value)%>" /></td>
<td width="20" bgcolor="#FFCCFF"><input type="radio" name="team<%=counter%>" id="radio2" value="<%=(rs_set1.Fields.Item("def_stat").Value)%>" /></td>
<td width="66" bgcolor="#FFCCFF"><%=(rs_set1.Fields.Item("def_stat").Value)%></td>
<td width="27" bgcolor="#FFCCFF"><input type="radio" name="team<%=counter%>" id="radio3" value="<%=(rs_set1.Fields.Item("team2").Value)%>" /></td>
<td width="126" bgcolor="#FFCCFF"><%=(rs_set1.Fields.Item("team2").Value)%></td>
</tr>
<%
Repeat1__index=Repeat1__index + 1
Repeat1__numRows=Repeat1__numRows - 1
rs_set1.MoveNext()
Wend
%>
<tr>
<td colspan="6" bgcolor="#50B2FF"><div align="center">
<input type="submit" name="button" id="button" value="Submit" />
</div></td>
</tr>
</table>
<div align="center"></div>
</form>
答案 0 :(得分:1)
我会回答你的问题,但正如亚伦所说,我们也应该从我们得到的答案中“学习”,所以...我会一次给你一块,这样你就可以建立它并理解什么正在继续。
首先,您需要意识到您正在验证动态创建的不同名称的单选按钮,因此您需要创建一个脚本,使用动态创建的名称和ID来“重复”自己。
通过声明javascript“counter”变量并将其初始值设置为零来启动脚本。
<script Language="JavaScript">
<!--
function Form1_Validator(theForm) {
<% Dim jscounter
jscounter = 0
接下来,我们将开始javascript的重复区域并增加我们的javascript计数器。
While (NOT rs_set1.EOF)
jscounter = jscounter + 1
%>
接下来,通过将计数器变量附加到名称并声明变量初始值为“false”来声明您的javascript变量使其变为动态。
var radioSelected<%= jscounter %> = false;
现在,遍历该行的单选按钮。请注意,jscounter变量已附加到名称。
for (i = 0; i < theForm.team<%= jscounter %>.length; i++)
{
接下来,提供两个可能的实例(已检查或未检查)以及如何处理它们。
if (theForm.team<%= jscounter %>[i].checked)
radioSelected<%= jscounter %> = true;
}
if (!radioSelected<%= jscounter %>)
{
alert("Please select one of the \"team <%= jscounter %>\" options.");
return (false);
}
差不多完成了...现在,结束循环并重复,直到在javascript中创建了所有按钮行。
<%
rs_set1.MoveNext()
Wend
If (rs_set1.CursorType > 0) Then
rs_set1.MoveFirst
Else
rs_set1.Requery
End If
%>
最后,我们将通过警告关闭javascript,告诉我们所有验证都已成功。
alertsay = "All Validations have succeeded. "
alertsay = alertsay + "This is just a test page. There is no submission page."
alert(alertsay);
return (false);
}
//-->
</script>
注意:调试后可以删除上面的三条“警报”行(如果您这样选择),然后更改“return(false);”为了“真实”,以便提交表格。
现在让我们继续使用表单的HTML。
首先,将此行添加到您的初始表单标记...
onsubmit="return Form1_Validator(this)"
接下来,开始重复区域,不要忘记给你的计数器初始值为零。
<% Dim counter
counter = 0
While (NOT rs_set1.EOF)
counter = counter + 1
%>
然后,更改单选按钮“id”以使用计数器变量,就像对“name”属性所做的那样。
id="team<%=counter%>"
最后,结束循环并重复直到所有行都已创建。
<%
rs_set1.MoveNext()
Wend
If (rs_set1.CursorType > 0) Then
rs_set1.MoveFirst
Else
rs_set1.Requery
End If
%>
就是这样!
现在这里是完整的javascript。
<script Language="JavaScript">
<!--
function Form1_Validator(theForm) {
<% Dim jscounter
jscounter = 0
While (NOT rs_set1.EOF)
jscounter = jscounter + 1
%>
var radioSelected<%= jscounter %> = false;
for (i = 0; i < theForm.team<%= jscounter %>.length; i++)
{
if (theForm.team<%= jscounter %>[i].checked)
radioSelected<%= jscounter %> = true;
}
if (!radioSelected<%= jscounter %>)
{
alert("Please select one of the \"team <%= jscounter %>\" options.");
return (false);
}<%
rs_set1.MoveNext()
Wend
If (rs_set1.CursorType > 0) Then
rs_set1.MoveFirst
Else
rs_set1.Requery
End If
%>
alertsay = "All Validations have succeeded. "
alertsay = alertsay + "This is just a test page. There is no submission page."
alert(alertsay);
return (false);
}
//-->
</script>
而且,表格......
<form id="form1" name="form1" method="post" onsubmit="return Form1_Validator(this)" action="super4_engine.asp" >
<table width="442" border="0" align="left" cellpadding="3" cellspacing="3">
<tr>
<td colspan="6" bgcolor="#50B2FF"><div align="center"><strong>Set 1</strong></div></td>
</tr>
<% Dim counter
counter = 0
While (NOT rs_set1.EOF)
counter = counter + 1
%>
<tr>
<td width="20" bgcolor="#FFCCFF"><input type="radio" name="team<%=counter%>" id="team<%=counter%>" value="<%=(rs_set1.Fields.Item("team1").Value)%>" /></td>
<td width="126" bgcolor="#FFCCFF"><%=(rs_set1.Fields.Item("team1").Value)%>
<input name="super<%=counter%>" type="hidden" id="super<%=counter%>" value="<%=(rs_set1.Fields.Item("game_id").Value)%>" /></td>
<td width="20" bgcolor="#FFCCFF"><input type="radio" name="team<%=counter%>" id="team<%=counter%>" value="<%=(rs_set1.Fields.Item("def_stat").Value)%>" /></td>
<td width="66" bgcolor="#FFCCFF"><%=(rs_set1.Fields.Item("def_stat").Value)%></td>
<td width="27" bgcolor="#FFCCFF"><input type="radio" name="team<%=counter%>" id="team<%=counter%>" value="<%=(rs_set1.Fields.Item("team2").Value)%>" /></td>
<td width="126" bgcolor="#FFCCFF"><%=(rs_set1.Fields.Item("team2").Value)%></td>
</tr>
<%
rs_set1.MoveNext()
Wend
If (rs_set1.CursorType > 0) Then
rs_set1.MoveFirst
Else
rs_set1.Requery
End If
%>
<tr>
<td colspan="6" bgcolor="#50B2FF"><div align="center">
<input type="submit" name="button" id="button" value="Submit" />
</div></td>
</tr>
</table>
</form>
这里可以看到一个工作演示...... http://siteprevue.net/stackoverflow/radiovalidator.asp
答案 1 :(得分:0)
当首次在页面上绘制时,单选按钮的选中状态为空白。
所以如果你连接team0.checked&amp;&amp;的价值观team1.checked&amp;&amp; team2.checked为单个字符串值
连接字符串将包含“checked”或“”,因此当串联=“”时,可以验证保持未选中的组。
当串联的字符串=“已检查”或长度&gt;时,会传递验证。 0