jinjuduo(http://jinjuduo.18wa.com/) 说的不错,但是我要按要求的,比如第3题必须要选3个才符合要求

解决方案 »

  1.   

    在head标记中加入
    <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>
      

  2.   

    xuzuning(唠叨) 写的果然不错,确是高手啊!我没来得及看代码,只是看了下效果,不错!
    但是还有个问题啊,就是那个排序题好象没有解决,或者可能是用“text”可能不好解决,xuzuning(唠叨) 能否给解决一下这个问题啊(不一定要用text控件的,只要实现同样的效果就好了),一旦解决,马上给分!
      

  3.   

    <!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; }

    } 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>
      

  4.   

    lantersen好象都把问题解决了,但是我测试了一下,还有有点小小的问题哈:排序题如果选ABBCE也是可以提交的,但是这种情况是不允许的,也就是说不能有重复的,这个问题解决,马上就给分了!非常感谢各位
      

  5.   

    你可以把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;} 
       }
    }
    还有就是,各种不同的浏览器都支持吗?//这个肯定是不行的,得等到所有的浏览器都遵循同样的标准,这样你这个问题也就不存在了;
      

  6.   

    更正:var t4node = document.getElementById('t4');==》var t4node = document.getElementById('t4').value;
      

  7.   

    剩下的问题自己解决,给分了:xuzuning(唠叨)的方法我比较赞同!lantersen(蓝水仁--明天的希望,让我们忘记了今天的痛苦!~)也很热心,谢谢