在每个下拉的onchange事件中都调一个函数,这个函数判断所有加起来是不是超过9

解决方案 »

  1.   

    hbhbhbhbhb1021(天外水火(我要多努力)),能详细点吗,我想了想这样好像不行呢,也可能我还没说清楚。<select>都是在一个<form>中的,我本来想这几个<select>都选完后,通过这样来判断:<form onsubmit="check()">,不知可行吗,但这个函数我写不出来。
      

  2.   

    <select name="select1" multiple >
      <option>...</option>
      <option>...</option>
      <option>...</option>
    </select><select name="select2" multiple >
      <option>...</option>
      <option>...</option>
      <option>...</option>
      <option>...</option>
      <option>...</option>
      <option>...</option>
    </select><select name="select3" multiple >
      <option>...</option>
      <option>...</option>
      <option>...</option>
      <option>...</option>
      <option>...</option>
      <option>...</option>
    </select>
    <input name=button1 type=button value="测试" onclick=check()>
    <script language=javascript>
    function check()
    {
    num1=showNum("select1")
    if(!((num1>=1)&&(num1<=3)))
    {
    alert("第一组选择错误")
    return false;
    }
    num2=showNum("select2")
    if(!((num2>=3)&&(num2<=6)))
    {
    alert("第二组选择错误")
    return false;
    }
    num3=showNum("select3")
    if(!((num3>=2)&&(num3<=6)))
    {
    alert("第三组选择错误")
    return false;
    }
    var num=parseInt(num1)+parseInt(num2)+parseInt(num3)
    if(num>9)
    {
    alert("总数选择错误")
    return false;
    }
    }
    function showNum(str)
    {
    var num=0
    var obj=document.getElementById(str)
    for(var i=0;i<obj.options.length;i++)
    {
    if(obj.options[i].selected)
    {
    num++
    }
    }
    return num;
    }
    </script>
      

  3.   

    建立几个<select>,并且都没有multiple属性
    =>
    应该设置multiple属性,这样才表示多选,
    在这种情况下可以使用楼上的代码
      

  4.   

    ice_berg16(寻梦的稻草人),您好,我的想法是呢,不用multiple属性,但用户在提交前可以多次选下拉菜单中选,也就是说,能多次选,但不能按住ctrl键选多个。如果这样,hbhbhbhbhb1021(天外水火(我要多努力)),ice_berg16(寻梦的稻草人),还有大伙,该怎么写呢?
      

  5.   

    可保存到数组中var s1=[];
    var s2=[];
    var s3=[]
    function addNum(arr)
    {
      this.arr = arr;
      this.onchange= function(){
          this.arr.push(this.value);
      } 
    }
    var sel = document.getElementsByTagName("select");
    checkNum.apply(sel[0],[s1]);
    checkNum.apply(sel[1],[s2]);
    checkNum.apply(sel[2],[s3]);function checkNum(){
    if( s1.length > 3 || s1.length < 1 )
    {
    alert('select1选择错误');
    return false;
    }
    if( s2.length > 6 || s2.length < 2 )
    {
    alert('select2选择错误');
    return false;
    }
    if( s3.length > 3 || s3.length < 3 )
    {
    alert('select3选择错误');
    return false;
    }
    if( s1.length + s2.length + s3.length > 9 )
    {
    alert('select总数错误');
    return false;
    }}其实checkNum用来在提交前做的检查
      

  6.   

    ice_berg16(寻梦的稻草人),如果定义三个<select name="select1">,<select name="select2">,<select name="select3">,var sel = document.getElementsByTagName("select")这样是不是不行了呢?
      

  7.   

    应该可以,他把3个的所有<option>看作一个数组,你试试
      

  8.   

    如果定义三个<select name="select1">,<select name="select2">,<select name="select3">,
    现在不是就是3个吗?
    如果有其它的select,你可以设置select的id,用document.getElementById("selId")取得select对象
      

  9.   

    ----------------- start ---------------------------  var s1 = [];
      var s2 = [];
      var s3 = [];
      var s4 = [];
      
      function addNum(arr)
      {
        this.arr = arr;
        this.onchange = function() {
            this.arr.push(this.value);
        }
      }  var sel = document.getElementsByTagName("select");
      
      checkNum.apply(sel[0], [s1]);
      checkNum.apply(sel[1], [s2]);
      checkNum.apply(sel[2], [s3]);
      checkNum.apply(sel[3], [s4]);  function checkNum()
      {
        if (s1.length != 1) {
            alert("守门员选且仅选1个");
            return FALSE;
        }
        if (s2.length < 3 || s2.length > 6) {
            alert("后卫选且仅选3至6个");
            return FALSE;
        }
        if (s3.length < 2 || s3.length > 6) {
            alert("中场选且仅选2至6个");
            return FALSE;
        }
        if (s4.length < 1 || s4.length > 3) {
            alert("前锋选且仅选1至3个");
            return FALSE;
        }
        if ((s1.length + s2.length + s3.length + s4.length) != 11) {
            alert("球队人数错误,请重新选择");
            return FALSE;
        }
      } -------------- end -------------------------------一刷新页面,总是弹出“守门员选且仅选1个”,就好像<body onload="alert('守门员选且仅选1个')">一样,但我没找到错误
      

  10.   

    ice_berg16(寻梦的稻草人),我是觉得,上面的代码只要JS一load就调用了checkNum函数(因为checkNum.apply(sel[0], [s1]);),所以,会出现“一刷新页面,总是弹出‘守门员选且仅选1个’,就好像<body onload="alert('守门员选且仅选1个')">一样”的问题我理解的对吗
      

  11.   

    不好意思,是我的程序有问题,应该是
    addNum.apply,而不是checkNum.apply,因为昨天改的时候忘记改那里了!
      

  12.   

    嗯,好的,现在代码改称这样了:
    // ----------------- start ---------------------------  var s1 = [];
      var s2 = [];
      var s3 = [];
      var s4 = [];
      
      function addNum(arr)
      {
        this.arr = arr;
        this.onchange = function() {
            this.arr.push(this.value);
        }
      }  var sel = document.getElementsByTagName("select");
      
      checkNum.apply(sel[0], [s1]);
      checkNum.apply(sel[1], [s2]);
      checkNum.apply(sel[2], [s3]);
      checkNum.apply(sel[3], [s4]);  function checkNum()
      {
        if (s1.length != 1) {
            alert("守门员选且仅选1个");
            return FALSE;
        }
        if (s2.length < 3 || s2.length > 6) {
            alert("后卫选且仅选3至6个");
            return FALSE;
        }
        if (s3.length < 2 || s3.length > 6) {
            alert("中场选且仅选2至6个");
            return FALSE;
        }
        if (s4.length < 1 || s4.length > 3) {
            alert("前锋选且仅选1至3个");
            return FALSE;
        }
        if ((s1.length + s2.length + s3.length + s4.length) != 11) {
            alert("球队人数错误,请重新选择");
            return FALSE;
        }
      } // -------------- end -------------------------------随之的问题是,即使按要求分别从4个下拉菜单中选择,即按照程序,s1.length == 1,s2.length >2 && s2.length <7,s3.length >1 && s3.length < 7,s4.length >0 && s4.length < 4,选好后,点确定后,都会弹出“守门员选且仅选1个”,这会是哪里的问题呢?
      

  13.   

    上面写错了,应是这样:  addNum.apply(sel[0], [s1]);
      addNum.apply(sel[1], [s2]);
      addNum.apply(sel[2], [s3]);
      addNum.apply(sel[3], [s4]);