<select name="SubjectID1" size="1" onChange="checkSubjectSelect(this.options[this.options.selectedIndex].text,1,this.options.selectedIndex)">
<option value="0">请选择科目</option>
<option value="1">语文</option>
<option value="2">数学</option>
<option value="1">英语</option>
<option value="1">政治</option>
</select>
为保证此列表选不与已选课程重复,做一函数防止其选择重复
   //防止科目重复的函数   (科目号,第i个菜单项)
<script language="javascript">
<!--
//在此假设上一个选语文
var strFirstSubject = "语文";
var lastSelectSubject = null;
function checkSubjectSelect(v,ElemIndex,intIndex)
{   if (v==strFirstSubject) //有重复科目 
    { //已经选择过
 alert("选择了重复的科目\n请重新选择!");
 if(lastSelectSubject == null)
 {
  alert("SubjectID1.options.selectedIndex=0");
  eval("SubjectID1.options.selectedIndex=0"); //把选项重置,原来是哪项就置回哪项
 }
 else
 {
  alert("SubjectID1.options["+lastSelectSubject+"].selected=true")
  eval("SubjectID1.options["+lastSelectSubject+"].selected=true");
 }
 
}
else
{
lastSelectSubject = intIndex;
}  //把该科目号存入相应位置
 // SubjectArray[ElemIndex]=v;
}
//-->
</script>

解决方案 »

  1.   

    问题解决了,在数组中存储的东东改变一下:
    由原来的存放课程号改为存放课程在下拉列表中的索引号.
    例如 课程号 课程名  在列表中的索引号
           1     语文     1
           2     数学     2
           4     英语     3
           6     政治     4
    假如已选语文,政治则数组中存放(1,2,0,0),而不是原来的(1,6,0,0)
    这样,如果回头修改已选的“语文”为“政治”,提示“有重复”后,用数组存放的索引号,仍可把下拉列表项置回到“语文”if (isSameSubject==true) //有重复科目 
        { //已经选择过
     alert("选择了重复的科目\n请重新选择!");
     eval("f.SubjectID"+ElemIndex+".options.selectedIndex=SubjectArray[ElemIndex]"); //把选项重置,原来是哪项就置回哪项
    }
    else  //把该列表的下拉序号存入相应位置
      //SubjectArray[ElemIndex]=v;
      eval("SubjectArray[ElemIndex]=f.SubjectID"+ElemIndex+".options.selectedIndex");