a_cmb()更新一点问题都没有,下拉列表框里的内容全部更新了,只是显示的不是传入的那个学生的名字

解决方案 »

  1.   

    写了一个 你看是这意思不?
    <!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>
    </head><body style="text-align:center; ">
    <Script language="javascript">
    function checkStu(){
    var inputValue=parseInt(document.getElementById("stuid").value);
    var stuSel=document.getElementById("sel");
    //var testResult=false;for(var i=0;i<stuSel.length;i++){
    if(inputValue==stuSel.options[i].value){
      stuSel.selectedIndex=i;
     // testResult=true;
      return;
      }
    }
    stuSel.options.add(new Option(inputValue,inputValue.toString()));
    stuSel.selectedIndex=stuSel.length-1;
    }
    </Script>
    <select id="sel">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    </select><input type="text" id='stuid'>
    <input type="button" onClick="checkStu()">
    </body>
    </html>
      

  2.   

    谢谢你,不过,你的代码是把没有的数据加一个到下拉列表框里,而我的想法是,在我的函数中,用a_cmb()将stu下拉框里的内容全部清空换成了另一个班的数据,但是,换后下面红色的代码没有起到作用。不知这是为什么。
      

  3.   

     for (var i = 0,len = dl.options.length; i  < len; i++) { 
        if (stuid== dl.options[i].value){ 
         dl.value=stuid; 
         return i; 
        } 
      } 黄色代码的 return i 运行,程序的控制权就交换给调用他的函数了。
      

  4.   

    咄咄怪事!加了蓝色的这行语句本是想调试用,但加它后运行正常,把它去掉就不正常了,这是怎么回事?
      a_cmb("../lst?tab=stuid&id="+stuid,"stu");
      for (var i=0,len=dl.options.length;i<len;i++) {
       alert(dl.options[i].value+"bbb");
        if (stuid==dl.options[i].value){
         dl.selectedIndex=i;//dl.value=stuid;
         return i;
        }
      }
    alert(dl.value+"aaa");
      return -1;
    }
      

  5.   

    递归调用你黄色部分内容,加个延时,应当就行了,我把延时时长写了个22,你调试时可能要改一下。
    var isRun=false;
    function newStuid(stuid){
    var dl = document.getElementById('stu');
    var old=dl.value;
    var i = 0;
      for (i=0,len = dl.options.length; i < len; i++) {
        if (stuid== dl.options[i].value){
         dl.selectedIndex=i;//dl.value=stuid;
         return i;
        }
      }
      if(isRun==true){isRun=false;return 0;}
      isRun=true;
      a_cmb("../lst?tab=stuid&id="+stuid,"stu");
      setTimeout("newStuid("+stuid+")",22);
    }
      

  6.   

    toString有问题,输入字符串下拉框变NaN了
      

  7.   

    写掉了一句,重发一下,
    var isRun=false;
    function newStuid(stuid){
    var dl = document.getElementById('stu');
    var old=dl.value;
    var i = 0;
      for (i=0,len = dl.options.length; i < len; i++) {
        if (stuid== dl.options[i].value){
         dl.selectedIndex=i; isRun=false;
         return i;
        }
      }
      if(isRun==true){isRun=false;return 0;}
      isRun=true;
      a_cmb("../lst?tab=stuid&id="+stuid,"stu");
      setTimeout("newStuid("+stuid+")",70);
    }
      

  8.   

    我懂了,使用ajax方式的的a_cmb()函数的解有延时,所以造成数据不能更新,但你用了一个延时函数,这也不是完全解决问题的办法呀,因为网络时延的长短是不定的。有没有办法让a_cmb()运行完之后才运行下面的语句?
      

  9.   

    谢谢大家答复,我要结了,现在我已经把相关代码直接写在AJAX的处理函数中,这样不会出现时间问题了。