1:   可以在设定dict时也把s初始化:dict.r1 = 1;s.r1 = 0;
//统计个成员的选中次数
for(i=0; i<o.length; i++) 
{
if(! s[o[i].name]) continue;
if(o[i].disabled){ s[o[i].name]=null;continue; }
if(o[i].type == 'radio' || o[i].type == 'checkbox') 
{
if(o[i].checked) s[o[i].name]++;
}
}
判断时多判断一个null2: 
var minc = 'A'.charCodeAt(0);
function chk(str,num){
  if(str.length!=num)return false;
  str = str.toUpperCase();
  var arr = [];
  var maxc = minc+num-1;
  for(var i=0;i<str.length;i++){
    var el = str.charCodeAt(i);
    if(el<minc || el>maxc)
      return false;
    for(var j=0;j<i;j++)
      if(el==arr[j])return false;
    arr[i]=el;
  }
  return true;
}

解决方案 »

  1.   

    我实验了下,好象是没有解决啊!而且第2个问题中,已经调用了check()函数,怎样才能再调用
    chk(str,num)?
      

  2.   

    第一个意思是:null表示disable,楼主自己整理一下吧
    第二个测试:alert( chk("BCDA",4) )
      

  3.   

    if(! s[o[i].name]) continue;
    ->
    if(s[o[i].name]==null) continue;判断错了,纠正一下
      

  4.   

    for(i in dict) 
    {
      if(s[i] == null)  //添加的
        continue;
      if(dict[i] == -1)
        ...第一个问题是否可以解决?
      

  5.   

    稍微改了一下:
    var minc = 'A'.charCodeAt(0);//字母A的编码
    function checkText(str,num){
      var ret = -1;//出错返回值
      if(str.length!=num)return ret;//判断选项个数
      str = str.toUpperCase();//选项大写字母
      var arr = [];//记录判断通过的选项,用来判别重复
      var maxc = minc+num-1;//最大字母的编码
      for(var i=0;i<str.length;i++){
        var el = str.charCodeAt(i);
        if(el<minc || el>maxc)//判断编码以外的字符
          return ret;
        for(var j=0;j<i;j++)//判断是否重复选项
          if(el==arr[j])return ret;
        arr[i]=el;//保存判断通过的选项
      }
      return num;
    }
      

  6.   

    if(o[i].type == 'radio' || o[i].type == 'checkbox') 
    {
    if(o[i].checked) s[o[i].name]++;
    }
    else if(o[i].type == 'text')///////添加的部分
      s[o[i].name] = checkText(o[i].value,dict[o[i].name]);
      

  7.   

    ...
    else
    {
    if(s[i] < 0)////添加的部分
    {
      k = false;
      alert(i + " 必须填写" + dict[i] + "项");
    }
    else if(s[i] != dict[i]) 
    {
    k = false;
    alert(i + " 必须选择" + dict[i] + "项");
    }
    }
      

  8.   

    麻烦fosjos(无聊的菜鸟程序员)把程序合起来吧,多谢
      

  9.   

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <script language="javascript">
    var dict = {};
    var s = {};//对象dict用于保存规定的选择数
    var minc = 'A'.charCodeAt(0);//字母A的编码
    function checkText(str,num){
      var ret = -1;//出错返回值
      if(str.length!=num)return ret;//判断选项个数
      str = str.toUpperCase();//选项大写字母
      var arr = [];//记录判断通过的选项,用来判别重复
      var maxc = minc+num-1;//最大字母的编码
      for(var i=0;i<str.length;i++){
        var el = str.charCodeAt(i);
        if(el<minc || el>maxc)//判断编码以外的字符
          return ret;
        for(var j=0;j<i;j++)//判断是否重复选项
          if(el==arr[j])return ret;
        arr[i]=el;//保存判断通过的选项
      }
      return num;
    }function check(form) 
    {
      var i, o = form.elements;
      var k = true;  //统计个成员的选中次数
      for(i=0; i<o.length; i++) 
      {
        if(s[o[i].name]==null) continue;
        if(o[i].disabled){ s[o[i].name]=null;continue; }
        if(o[i].type == 'radio' || o[i].type == 'checkbox') 
        {
          if(o[i].checked) s[o[i].name]++;
        }
        else if(o[i].type == 'text')
          s[o[i].name] = checkText(o[i].value,dict[o[i].name]);
      }
      
      //与规定的次数进行比较
      for(i in dict) 
      {
        if(s[i] == null)
          continue;
        if(dict[i] == -1)
        {
          if(s[i] < 1)
          {    
            k = false;
            alert(i + " 必须至少选择1项");
          }
        }
        else
        {
          if(s[i] < 0)
          {
            k = false;
            alert(i + " 必须填写" + dict[i] + "项");
          }
          else 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" disabled > A、白羊座<br>
        <input type="radio" name="r1" value="2" disabled > B、水平座<br>
      </p>
     <script>dict.r1 = 1;s.r1 = 0;</script>
      <p>2、你的属相?</p>
      <p>
        <input type="radio" name="r2" value="1"> A、羊<br>
        <input type="radio" name="r2" value="2"> B、狗<br>
        <input type="radio" name="r2" value="3"> C、猪<br>
      </p>
     <script>dict.r2 = 1;s.r2 = 0;</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、水平座<br>
     <script>dict.c3 = 3;s.c3 = 0;</script>
      </p>
      <p>4、按照星座的魅力指数进行排序</p>
      <p>
      A、白羊座<br>
      B、金牛座<br>
      C、天蝎座<br>
      D、人马座<br>
        E、水平座<br>
      </p>
      <p>
        <input type="text" name="t4">
     <script>dict.t4 = 5;s.t4 = 0;</script>
    </p>
      <p>5、你认为哪些星座脾气比较小?</p>
      <p>
        <input type="checkbox" name="c5" value="1">A、白羊座<br>
      <input type="checkbox" name="c5" value="2">B、金牛座<br>
      <input type="checkbox" name="c5" value="3">C、天蝎座<br>
      <input type="checkbox" name="c5" value="4">D、人马座<br>
      <input type="checkbox" name="c5" value="5">E、水平座<br>
      <script>dict.c5 = -1;s.c5 = 0;</script>
      </p>
      <p>
        <input type="submit" name="Submit" value="提交">
      </p>
    </form>
    </body>
    </html>
      

  10.   

    function check(form) 
    {
      var i, o = form.elements;
      var k = true;
      for(i in dict)/////添加的,忘记清0了^_^
        s[i] = 0;
      ...
      

  11.   

    代码还没有看,测试好象没有错误,给分了,fosjos(无聊的菜鸟程序员)很热心,多谢啦,有问题再请教你