在JS里,初始化多个页面的下拉框,所用方法相同,但只是最后一个(N)起作用。
当把初始化第N个下拉框的代码注释掉后,第N-1个下拉框就可以被初始化,但是1~N-2个下拉框仍然不能初始化,也不报错。
请问大侠是啥问题呢。代码:
 var sM2=document.form1.stM2.value;
   var  sM3=document.form1.stM3.value;     document.form1 .txtItmeID.value="stM7";//set txtItmeID
    _Default.GetDataTable("select t0.u_code code,t0.u_name name from [@TS_M_MY] t0 where t0.u_C=N'"+ sM2  +"' and t0.u_n='"+ sM3 +"' and  isnull(t0.u_s,'')='"+ document.form1.stM4.value +"' order by t0.U_Code",InitSelect);
    document.form1 .txtItmeID.value="stM8";//set txtItmeID
    _Default.GetDataTable("select t0.u_code code,t0.u_name name from [@TS_M_MT] t0 where t0.u_C=N'"+ sM2  +"' and t0.u_n='"+ sM3 +"'  order by t0.U_Code",InitSelect);
   document.form1 .txtItmeID.value="stM9";//set txtItmeID
    _Default.GetDataTable("select t0.u_code code,t0.u_name name from [@TS_M_MP] t0 where t0.u_C=N'"+ sM2  +"' and t0.u_n='"+ sM3 +"'  order by t0.U_Code",InitSelect);
   document.form1 .txtItmeID.value="stM10";//set txtItmeID
    _Default.GetDataTable("select t0.u_code code,t0.u_name name from [@TS_M_MR] t0   order by t0.U_Code",InitSelect);其中用到了ajax方法。 _Default.GetDataTable为后台方法,参数为SQL语句,返回值为DataTable。
InitSelect为JS方法,初始化下拉框用。
控件txtItmeID记录要初始化的下拉框ID。
方法InitSelect:
//Inint Select 
function InitSelect(response)
{
var dt = response.value;
if(dt != null && typeof(dt) == "object" && dt != null)
{
        var obj;
        obj=document.getElementById(document.form1.txtItmeID.value);//txtItmeID record the ID of Items
        var n=obj.length; 
      
        for (var i=1;i<n;i++)
        {
         obj.options.remove(obj.length-1);
        }        n=dt.Rows.length;
        for (var i=0;i<n;i++)
        {
        obj.options[obj.length]=new   Option(dt.Rows[i].code+"-"+dt.Rows[i].name,dt.Rows[i].code);
        }
}}

解决方案 »

  1.   


    /Inint Select
    function InitSelect(response)
    {
    var dt = response.value;
    if(dt != null && typeof(dt) == "object" && dt != null)
    {
            var obj;
            obj=document.getElementById(document.form1.txtItmeID.value);//txtItmeID record the ID of Items
            var n=obj.options.length;
         
            for (var i=0;i <n;i++)
            {
            obj.options.remove(i);
            }        n=dt.Rows.length;
            for (var i=0;i <n;i++)
            {
            obj.options[i]=new  Option(dt.Rows[i].code+"-"+dt.Rows[i].name,dt.Rows[i].code);
            }
    }}
      

  2.   


    谢谢mqc507。obj.options.remove(i);
    和obj.options.remove(obj.length-1); 
    没什么区别。问题应该不在这儿。
      

  3.   

    代码太乱,你的各个下拉框初始化传的条件后台有case处理吗?加了break吗,然后你前台js
    obj=document.getElementById(document.form1.txtItmeID.value);//txtItmeID record the ID of Items
    这是后台设定的?是不是每次都设定了最后一个
      

  4.   

    应该是js的一个执行时间问题 
     _Default.GetDataTable("select t0.u_code code,t0.u_name name from [@TS_M_MP] t0 where t0.u_C=N'"+ sM2  +"' and t0.u_n='"+ sM3 +"'  order by t0.U_Code",InitSelect); 
     估计这个还没返回值  就已经执行下面的
    document.form1 .txtItmeID.value="stM10";//set txtItmeID  赋值了
     想办法让它一个执行完了再执行下一个