<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> <script language="javascript">
var re = new Array('110'); function check() { var uform = document.forms['form1']; var children = uform.elements;
for (var i=0; i<children.length; i++) { var ctype = children[i].getAttribute("type"); var cname = children[i].getAttribute("name"); var cvalue = children[i].value.toString();
if (ctype.toString().toLowerCase() == 'radio' && !checkR(cname)) { if (!radioSelect(cname)) { alert('Radio: '+cname+' you have forget select!!'); children[i].focus(); return false; } } else if (ctype.toString().toLowerCase() == 'checkbox') { if (!chkboxCheck(cname)) { alert('Check box: '+cname+' you have forget checked!!'); children[i].focus(); return false; } } else if (ctype.toString().toLowerCase() == 'text') { //alert(ctype.toString().toLowerCase()); if (cname.toString() == 't4') { var reg = /^[A-E]{5}$/; //alert(reg.test(cvalue)) if (!reg.test(cvalue)) { alert('Please sort starts'); children[i].focus(); return false; } } } } alert('All is OK!!'); return false; }
function radioSelect(name) { var relem = document.getElementsByName(name);
for (var j=0; j<relem.length ; j++) { if (relem[j].checked) { re.push(name); return true; } } return false;
} function chkboxCheck(name) { var sign = 0; var chkelem = document.getElementsByName(name); for (var j=0; j<chkelem.length ; j++) { if (chkelem[j].checked) { sign++; } } if ((name == 'c3') && (sign >=3)) { return true; } else if ((name == 'c3') && (sign <3)) { return false; } else if ( sign == 0) { return false; }
你可以把t4中的字符全部读出来,再自行一个一个比较,比如: var t4node = document.getElementById('t4'); for (var i=0;i<t4node.length; i++) { for (var j=i+1;j<t4node.length;j++) { if(t4node[j]==t4node[i]) { alert('There is same latters!!');return false;} } } 还有就是,各种不同的浏览器都支持吗?//这个肯定是不行的,得等到所有的浏览器都遵循同样的标准,这样你这个问题也就不存在了;
<script>
var dict = {}; //对象dict用于保存规定的选择数
function check(form) {
var i, o = form.elements;
var s = {};
var k = true; //统计个成员的选中次数
for(i=0; i<o.length; i++) {
if(! s[o[i].name]) s[o[i].name] = 0;
if(o[i].type == 'radio' || o[i].type == 'checkbox') {
if(o[i].checked) s[o[i].name]++;
}
} //与规定的次数进行比较
for(i in dict) {
if(s[i] != dict[i]) {
k = false;
alert(i + " 必须选择" + dict[i] + "项");
}
}
return k;
}
</script>
这个函数是通用函数,与选择框实际命名无关表单需要改写一下
<form ... onsubmit='return check(this)'>
直接传递表单对象,可减少获取表单的开销需要在每组选择框之后加入向dict赋值的代码
如
<input type="radio" name="r1" value="1"> A、白羊座<br>
<input type="radio" name="r1" value="2"> B、水平座</p>
<script>dict.r1 = 1</script><input type="checkbox" name="c3" value="1"> A、白羊座<br>
<input type="checkbox" name="c3" value="2"> B、金牛座<br>
<input type="checkbox" name="c3" value="3"> C、天蝎座<br>
<input type="checkbox" name="c3" value="4"> D、人马座<br>
<input type="checkbox" name="c3" value="5"> E、水平座
<script>dict.c3 = 3</script>由于你的题目是从数据库读出来的,所以在生成这样的代码时并没有任何困难
完整的测试代码如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script>
var dict = {}
function check(form) {
var i, o = form.elements;
var s = {};
var k = true;
for(i=0; i<o.length; i++) {
if(! s[o[i].name]) s[o[i].name] = 0;
if(o[i].type == 'radio' || o[i].type == 'checkbox') {
if(o[i].checked) s[o[i].name]++;
}
}
for(i in dict) {
if(s[i] != dict[i]) {
k = false;
alert(i + " 必须选择" + dict[i] + "项");
}
}
return k;
}
</script></head><body>
<form name="form1" method="post" action="" onSubmit="return check(this);">
<p>1、你是什么星座?</p>
<p>
<input type="radio" name="r1" value="1"> A、白羊座<br>
<input type="radio" name="r1" value="2"> B、水平座</p>
<script>dict.r1 = 1</script>
<p>2、你的属相?</p>
<p>
<input type="radio" name="r2" value="1"> A、羊<br>
<input type="radio" name="r2" value="2"> B、狗</p>
<script>dict.r2 = 1</script>
<p>3、你认为哪个星座脾气比较大?请在下面选择三项(必须是三项)</p>
<p>
<input type="checkbox" name="c3" value="1"> A、白羊座<br>
<input type="checkbox" name="c3" value="2"> B、金牛座<br>
<input type="checkbox" name="c3" value="3"> C、天蝎座<br>
<input type="checkbox" name="c3" value="4"> D、人马座<br>
<input type="checkbox" name="c3" value="5"> E、水平座
<script>dict.c3 = 3</script>
</p>
<p>4、按照星座的魅力指数进行排序</p>
<p>
A、白羊座<br>
B、金牛座<br>
C、天蝎座<br>
D、人马座<br>
E、水平座</p>
<p>
<input type="text" name="t4">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
</body>
</html>
但是还有个问题啊,就是那个排序题好象没有解决,或者可能是用“text”可能不好解决,xuzuning(唠叨) 能否给解决一下这个问题啊(不一定要用text控件的,只要实现同样的效果就好了),一旦解决,马上给分!
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="javascript">
var re = new Array('110'); function check()
{
var uform = document.forms['form1'];
var children = uform.elements;
for (var i=0; i<children.length; i++)
{
var ctype = children[i].getAttribute("type");
var cname = children[i].getAttribute("name");
var cvalue = children[i].value.toString();
if (ctype.toString().toLowerCase() == 'radio' && !checkR(cname))
{
if (!radioSelect(cname))
{
alert('Radio: '+cname+' you have forget select!!');
children[i].focus();
return false;
}
}
else if (ctype.toString().toLowerCase() == 'checkbox')
{
if (!chkboxCheck(cname))
{
alert('Check box: '+cname+' you have forget checked!!');
children[i].focus();
return false;
}
}
else if (ctype.toString().toLowerCase() == 'text')
{
//alert(ctype.toString().toLowerCase());
if (cname.toString() == 't4')
{
var reg = /^[A-E]{5}$/;
//alert(reg.test(cvalue))
if (!reg.test(cvalue))
{
alert('Please sort starts');
children[i].focus();
return false;
}
}
}
}
alert('All is OK!!');
return false;
}
function radioSelect(name)
{
var relem = document.getElementsByName(name);
for (var j=0; j<relem.length ; j++)
{
if (relem[j].checked)
{ re.push(name); return true; }
}
return false;
} function chkboxCheck(name)
{
var sign = 0;
var chkelem = document.getElementsByName(name); for (var j=0; j<chkelem.length ; j++)
{
if (chkelem[j].checked)
{ sign++; }
}
if ((name == 'c3') && (sign >=3))
{ return true; }
else if ((name == 'c3') && (sign <3))
{
return false;
}
else if ( sign == 0)
{ return false; }
} function checkR(name)
{
for (var k=0; k<re.length; k++)
{
if (re[k] == name)
{
return true;
}
}
return false;
}</script>
</head><body>
<form name="form1" method="post" action="" onSubmit="return check();">
<p>1、你是什么星座?</p>
<p>
<input type="radio" name="r1" value="1"> A、白羊座<br>
<input type="radio" name="r1" value="2"> B、水平座</p>
<p>2、你的属相?</p>
<p>
<input type="radio" name="r2" value="1"> A、羊<br>
<input type="radio" name="r2" value="2"> B、狗</p>
<p>3、你认为哪个星座脾气比较大?请在下面选择三项(必须是三项)</p>
<p>
<input type="checkbox" name="c3" value="1"> A、白羊座<br>
<input type="checkbox" name="c3" value="2"> B、金牛座<br>
<input type="checkbox" name="c3" value="3"> C、天蝎座<br>
<input type="checkbox" name="c3" value="4"> D、人马座<br>
<input type="checkbox" name="c3" value="5"> E、水平座
</p>
<p>4、按照星座的魅力指数进行排序</p>
<p>
A、白羊座<br>
B、金牛座<br>
C、天蝎座<br>
D、人马座<br>
E、水平座</p>
<p>
<input type="text" name="t4">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
</body>
</html>
var t4node = document.getElementById('t4');
for (var i=0;i<t4node.length; i++)
{
for (var j=i+1;j<t4node.length;j++)
{
if(t4node[j]==t4node[i])
{ alert('There is same latters!!');return false;}
}
}
还有就是,各种不同的浏览器都支持吗?//这个肯定是不行的,得等到所有的浏览器都遵循同样的标准,这样你这个问题也就不存在了;