是个调查里进行判断,调查有很多项目,每个项目里又用几个选项。JS用来判断各个项目的选择选项不能为空。下面是页面源码,在最底下已经有了一个在多选时判断选择数不能超过自定义的最大选择数!判断不能为空应该要在提交按钮上加个动作,请高手帮忙啊,小弟JS不熟啊!<%option explicit%>
<%response.expires = 0%>
<!--#include file="common/conn.asp"--><?xml version="1.0" encoding="gb2312"?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>投票</title></head><body><%'v1.1
'当参数 subjectID <= 0 时,取最新的一条投票记录
sub PrintSubject(conn, rs, ByVal subjectID)
dim subjectExists 'subjectID 对应的投票主题(记录)是否存在
subjectExists = false
dim startTime, endTime, endTimeValid, securityRslt
startTime = Date()
endTime = CDate("1900-1-1")
endTimeValid = false
securityRslt = false
dim sql
if subjectID > 0 then
sql = "select subjectID, subjectName, startTime, endTime, endTimeValid, securityRslt from subjects where subjectID=" & subjectID
else
sql = "select top 1 subjectID, subjectName, startTime, endTime, endTimeValid, securityRslt from subjects order by subjectID desc"
end if
rs.Open sql, conn, 1, 1
if not rs.eof then
subjectExists = true
subjectID = rs("subjectID")
startTime = rs("startTime")
endTime = rs("endTime")
endTimeValid = rs("endTimeValid")
securityRslt = rs("securityRslt")
response.Write("<input type=""hidden"" name=""subjectID"" value=""" & subjectID & """ />")
if not endTimeValid then
'无结束日期
response.Write("<div class=""subject""><div>" & server.HTMLEncode(rs("subjectName")) & "</div>" & _
"<div class=""time"">投票日期:" & startTime & " 开始</div></div>" & vbcrlf)
else
response.Write("<div class=""subject""><div>" & server.HTMLEncode(rs("subjectName")) & "</div>" & _
"<div class=""time"">投票日期:" & startTime & " 至 " & endTime & "</div></div>" & vbcrlf)
end if
else
subjectExists = false
response.Write("参数 subjectID 对应的记录不存在。")
end if
rs.Close
if subjectExists then
'显示投票项目
call PrintItems(conn, rs, subjectID)
response.Write("<div class=""tool"">")
if DateDiff("d", startTime, Date()) < 0 then
'startTime 所指那天为投票开始的第一天
response.Write("<input type=""submit"" value=""投票还没开始"" disabled=""disabled"" />")
elseif endTimeValid and DateDiff("d", Date(), endTime) <= 0 then
'endTime 所指那天为投票结束的第一天
response.Write("<input type=""submit"" value=""投票已经结束"" disabled=""disabled"" />")
else
response.Write("<input type=""submit"" value="" 提 交 "" />" & vbcrlf)
end if
if not securityRslt then
'结果不保密,显示查看结果的链接
response.Write("<a href=""vote_rslt.asp?subjectID=" & subjectID & """ target=""_blank"">查看结果</a>")
end if
response.Write("</div>" & vbcrlf)
end if
end sub'显示投票项目
'会自动显示或调用投票选项显示
sub PrintItems(conn, rs, subjectID)
dim prevItemID, itemID, optionID
prevItemID = 0
itemID = 0
optionID = 0
dim validOptionsCnt
validOptionsCnt = 0
dim itemsCnt '如果主题的项目为1,那么则不显示项目的标题,使用主题名称即可
itemsCnt = 0
dim sql
sql = "select Count(*) as itemsCnt from items where subjectID=" & subjectID
rs.Open sql, conn, 1, 1
itemsCnt = rs("itemsCnt")
rs.Close
sql = "select items.itemID, items.itemName, items.validOptionsCnt" & _
", options.optionID, options.optionText, options.optionValue from" & _
" items left join options on items.itemID=options.itemID" & _
" where items.subjectID=" & subjectID & _
" order by items.priority desc, items.itemID, options.priority desc, options.optionID"
rs.Open sql, conn, 1, 1
do while not rs.eof
itemID = rs("itemID")
'显示项目
'如果 itemID 等于 prevItemID,说明此 itemID 和前一记录的 itemID 相同,不必再次输出 item,只需要输出 option 即可
if itemID <> prevItemID then
validOptionsCnt = rs("validOptionsCnt")
if itemsCnt > 1 then
if prevItemID > 0 then
prevItemID = itemID
'第二个及以后的投票项目,先输出 "</div>" 结束之前的 HTML 标签
response.Write("</div>" & vbcrlf & vbcrlf & _
"<div class=""item"">" & server.HTMLENcode(rs("itemName")) & "</div>" & vbcrlf & _
"<div class=""optionList"">" & vbcrlf)
else
prevItemID = itemID
response.Write("<div class=""item"">" & server.HTMLENcode(rs("itemName")) & "</div>" & vbcrlf & _
"<div class=""optionList"">" & vbcrlf)
end if
else
'只有一个项目,不显示项目名称
response.Write("<div class=""optionList"">" & vbcrlf)
end if
end if
'显示选项
optionID = rs("optionID")
if not IsNull(optionID) then
if validOptionsCnt = 1 then
'单选
response.Write(" <div class=""option""><input type=""radio"" name=""option_" & itemID & """ value=""" & optionID & """ id=""option_" & optionID & """ />" & _
"<label for=""option_" & optionID & """>" & server.HTMLEncode(rs("optionText")) & "</label></div>" & vbcrlf)
elseif validOptionsCnt <= 0 then
'多选
response.Write(" <div class=""option""><input type=""checkbox"" name=""option_" & itemID & """ value=""" & optionID & """ id=""option_" & optionID & """ />" & _
"<label for=""option_" & optionID & """>" & server.HTMLEncode(rs("optionText")) & "</label></div>" & vbcrlf)
else
'多选,有数量限制
response.Write(" <div class=""option""><input type=""checkbox"" name=""option_" & itemID & """" & _
" onclick=""javascript:ChckOptionsCnt(this, " & validOptionsCnt & ");"" value=""" & optionID & """ id=""option_" & optionID & """ />" & _
"<label for=""option_" & optionID & """>" & server.HTMLEncode(rs("optionText")) & "</label></div>" & vbcrlf)
end if
end if
rs.MoveNext
loop
'结束 optionList 的 HTML 标签
%>
<script type="text/javascript" language="javascript">
<!--
//检查选择的选项数,单选或多选(不限数目的选择)勿须使用该函数
//e 为当前活动 HTML 控件,即正在进行点击的多选框
//validOptionsCnt 当前项目允许的最大选择数
function ChckOptionsCnt(e, validOptionsCnt)
{
if (!e.checked)
{
return;
}
var voteForm = document.getElementById("voteForm");
var options = eval("voteForm." + e.name);
var i = 0;
var selectedOptionsCnt = 0; //当前项目中,已经选中了选项数
for (var i=0; i<options.length; i++)
{
if (options[i].checked)
{
selectedOptionsCnt++;
}
}
if (selectedOptionsCnt > validOptionsCnt)
{
alert("该项目最多只能选择 " + validOptionsCnt + " 个选项");
e.checked = false;
}
}
//-->
</script>
</body></html>
<%response.expires = 0%>
<!--#include file="common/conn.asp"--><?xml version="1.0" encoding="gb2312"?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>投票</title></head><body><%'v1.1
'当参数 subjectID <= 0 时,取最新的一条投票记录
sub PrintSubject(conn, rs, ByVal subjectID)
dim subjectExists 'subjectID 对应的投票主题(记录)是否存在
subjectExists = false
dim startTime, endTime, endTimeValid, securityRslt
startTime = Date()
endTime = CDate("1900-1-1")
endTimeValid = false
securityRslt = false
dim sql
if subjectID > 0 then
sql = "select subjectID, subjectName, startTime, endTime, endTimeValid, securityRslt from subjects where subjectID=" & subjectID
else
sql = "select top 1 subjectID, subjectName, startTime, endTime, endTimeValid, securityRslt from subjects order by subjectID desc"
end if
rs.Open sql, conn, 1, 1
if not rs.eof then
subjectExists = true
subjectID = rs("subjectID")
startTime = rs("startTime")
endTime = rs("endTime")
endTimeValid = rs("endTimeValid")
securityRslt = rs("securityRslt")
response.Write("<input type=""hidden"" name=""subjectID"" value=""" & subjectID & """ />")
if not endTimeValid then
'无结束日期
response.Write("<div class=""subject""><div>" & server.HTMLEncode(rs("subjectName")) & "</div>" & _
"<div class=""time"">投票日期:" & startTime & " 开始</div></div>" & vbcrlf)
else
response.Write("<div class=""subject""><div>" & server.HTMLEncode(rs("subjectName")) & "</div>" & _
"<div class=""time"">投票日期:" & startTime & " 至 " & endTime & "</div></div>" & vbcrlf)
end if
else
subjectExists = false
response.Write("参数 subjectID 对应的记录不存在。")
end if
rs.Close
if subjectExists then
'显示投票项目
call PrintItems(conn, rs, subjectID)
response.Write("<div class=""tool"">")
if DateDiff("d", startTime, Date()) < 0 then
'startTime 所指那天为投票开始的第一天
response.Write("<input type=""submit"" value=""投票还没开始"" disabled=""disabled"" />")
elseif endTimeValid and DateDiff("d", Date(), endTime) <= 0 then
'endTime 所指那天为投票结束的第一天
response.Write("<input type=""submit"" value=""投票已经结束"" disabled=""disabled"" />")
else
response.Write("<input type=""submit"" value="" 提 交 "" />" & vbcrlf)
end if
if not securityRslt then
'结果不保密,显示查看结果的链接
response.Write("<a href=""vote_rslt.asp?subjectID=" & subjectID & """ target=""_blank"">查看结果</a>")
end if
response.Write("</div>" & vbcrlf)
end if
end sub'显示投票项目
'会自动显示或调用投票选项显示
sub PrintItems(conn, rs, subjectID)
dim prevItemID, itemID, optionID
prevItemID = 0
itemID = 0
optionID = 0
dim validOptionsCnt
validOptionsCnt = 0
dim itemsCnt '如果主题的项目为1,那么则不显示项目的标题,使用主题名称即可
itemsCnt = 0
dim sql
sql = "select Count(*) as itemsCnt from items where subjectID=" & subjectID
rs.Open sql, conn, 1, 1
itemsCnt = rs("itemsCnt")
rs.Close
sql = "select items.itemID, items.itemName, items.validOptionsCnt" & _
", options.optionID, options.optionText, options.optionValue from" & _
" items left join options on items.itemID=options.itemID" & _
" where items.subjectID=" & subjectID & _
" order by items.priority desc, items.itemID, options.priority desc, options.optionID"
rs.Open sql, conn, 1, 1
do while not rs.eof
itemID = rs("itemID")
'显示项目
'如果 itemID 等于 prevItemID,说明此 itemID 和前一记录的 itemID 相同,不必再次输出 item,只需要输出 option 即可
if itemID <> prevItemID then
validOptionsCnt = rs("validOptionsCnt")
if itemsCnt > 1 then
if prevItemID > 0 then
prevItemID = itemID
'第二个及以后的投票项目,先输出 "</div>" 结束之前的 HTML 标签
response.Write("</div>" & vbcrlf & vbcrlf & _
"<div class=""item"">" & server.HTMLENcode(rs("itemName")) & "</div>" & vbcrlf & _
"<div class=""optionList"">" & vbcrlf)
else
prevItemID = itemID
response.Write("<div class=""item"">" & server.HTMLENcode(rs("itemName")) & "</div>" & vbcrlf & _
"<div class=""optionList"">" & vbcrlf)
end if
else
'只有一个项目,不显示项目名称
response.Write("<div class=""optionList"">" & vbcrlf)
end if
end if
'显示选项
optionID = rs("optionID")
if not IsNull(optionID) then
if validOptionsCnt = 1 then
'单选
response.Write(" <div class=""option""><input type=""radio"" name=""option_" & itemID & """ value=""" & optionID & """ id=""option_" & optionID & """ />" & _
"<label for=""option_" & optionID & """>" & server.HTMLEncode(rs("optionText")) & "</label></div>" & vbcrlf)
elseif validOptionsCnt <= 0 then
'多选
response.Write(" <div class=""option""><input type=""checkbox"" name=""option_" & itemID & """ value=""" & optionID & """ id=""option_" & optionID & """ />" & _
"<label for=""option_" & optionID & """>" & server.HTMLEncode(rs("optionText")) & "</label></div>" & vbcrlf)
else
'多选,有数量限制
response.Write(" <div class=""option""><input type=""checkbox"" name=""option_" & itemID & """" & _
" onclick=""javascript:ChckOptionsCnt(this, " & validOptionsCnt & ");"" value=""" & optionID & """ id=""option_" & optionID & """ />" & _
"<label for=""option_" & optionID & """>" & server.HTMLEncode(rs("optionText")) & "</label></div>" & vbcrlf)
end if
end if
rs.MoveNext
loop
'结束 optionList 的 HTML 标签
%>
<script type="text/javascript" language="javascript">
<!--
//检查选择的选项数,单选或多选(不限数目的选择)勿须使用该函数
//e 为当前活动 HTML 控件,即正在进行点击的多选框
//validOptionsCnt 当前项目允许的最大选择数
function ChckOptionsCnt(e, validOptionsCnt)
{
if (!e.checked)
{
return;
}
var voteForm = document.getElementById("voteForm");
var options = eval("voteForm." + e.name);
var i = 0;
var selectedOptionsCnt = 0; //当前项目中,已经选中了选项数
for (var i=0; i<options.length; i++)
{
if (options[i].checked)
{
selectedOptionsCnt++;
}
}
if (selectedOptionsCnt > validOptionsCnt)
{
alert("该项目最多只能选择 " + validOptionsCnt + " 个选项");
e.checked = false;
}
}
//-->
</script>
</body></html>
解决方案 »
- 用jquery打印九九乘法表,并且能被2整除的数字变色
- 求JSP代码
- 求1个JS 页面 编译UTF8 通用方法 在线等谢谢
- alert(whichIt)和alert(whichIt.parentElement)结果怎么一样呢?怎么回事
- 百度空间里添加新分类,最后的值怎么传?太快,我抓不到。
- 从后台返回一个javascript函数,在页面调用的时候为什么总是说函数未定义??????
- parentNode.style能得出什么?
- 求点击网页按钮给QQ发消息的代码
- 字符串替换
- js里有没有类似C/C++的位域
- csdn 结帖页面JS检验代码在firefox下失效,建议使用以下代码
- setAttribute问题:为什么不能触发TEST1()?
当返回false,就不会提交