<span id="xpr"><select name="pr_id" id="pr_id" disabled><option value="">选择产品...</option></select></span>xpr通过ajax返值<select name="pr_id" id="pr_id" ...><input type="button" onclick="window.location.href='?action=pi&pr_id='+ quzhi('pr_id')" value="提交">--------------javascript------------------
function quzhi(str){
var obj;
obj=document.getElementById(str);
    if(obj!=null){
for(var i=0;i<obj.length;i++){
if(obj[i].selected){
return obj[i].value;
}
}
}
}------------------------------------------在IE下,取值正确
在FireFox和Chrome都取不到?测试发现是obj[i].selected这句判断问题该怎么修改才能通用呢?

解决方案 »

  1.   

    试试
    obj.options[i].selectedobj.options[i].value
      

  2.   


    一样是IE可以,FF和谷歌都不行判断式if(obj[i].selected) 或 if(obj.options[i].selected) 在FF和谷歌下都没反应
      

  3.   

    function quzhi(str){
    var obj;
    obj=document.getElementById(str);
      if(obj!=null){
    for(var i=0;i<obj.length;i++){
    if(obj[i].selected){
    return obj[i].value;
    }
    }直接 return obj.value;就是选中的值,兼容IE,FF
      

  4.   

    进一步测试 发现貌似跟ajax有关系如果没有通过ajax返值,FF和谷歌也可以正常取值 - -!换了个方式,select上多个onchange事件,把this.value赋值给个隐藏的pr_id,input"提交"再去隐藏的pr_id取值,,,这样都通用了,, 不过感觉很麻烦不知道哪位朋友能提供个简洁的解决方案,
      

  5.   

    楼主是不是所有option value都为空啊,所以obj[i].value也是空
    换成obj[i].text试试
      

  6.   

    跟disabled有关系吧,需要去掉 disabled
      

  7.   


    试过了。。问题没变 :(而且ajax替换整个 <span id="xpr">(替换的内容)<span>,替换掉的<select>里是没有disabled
      

  8.   

    所有的浏览器都能得到值的,这是浏览器最基本的功能<select name="pr_id" id="pr_id">
    <option value="">选择产品...</option>
    <option value="1">11</option>
    <option value="2">22</option>
    </select>
    <input type="button" onclick="alert(quzhi('pr_id'))" value="提交" />
    <script>
    function quzhi(str){
    var obj;
    obj=document.getElementById(str);
    if(obj!=null){
    for(var i=0;i<obj.options.length;i++){
    if(obj.options[i].selected){
    return obj.options[i].value;
    }
    }
    }
    }
    </script>
      

  9.   

    别搞得复杂了
    <select name="pr_id" id="pr_id" disabled>
        <option value="">选择产品...</option>
        <option value="op1">11</option>
        <option value="op2" selected>22</option>
    </select>
    <input type="button" onclick="alert(quzhi('pr_id'))" value="提交"/>
    <script>
        function quzhi(str) {
            var obj;
            obj = document.getElementById(str);
            return obj.value;
        }
    </script>
      

  10.   


    没用通过ajax是可以正常取值,在6楼我有说了 - -!问题是我需要用到ajax来做多级下拉菜单关联
      

  11.   

    说明你的ajax有问题,跟select无关
      

  12.   

    在 Ajax 回调里执行这个方法
      

  13.   

    加入ajax也没有问题。大家都用了多少回了。是你自己的代码的问题。你的ajax都没有贴出来
      

  14.   

    ------------------------------js--------------------------
        function CreateXMLHttpRequest() 
        {
            var XMLHttp=false;
            try
            {
                XMLHttp=new ActiveXObject('Msxm12.XMLHTTP');
            }
            catch(e)
            {
                try
                {
                    XMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
                }
                catch(e)
                {
                    try
                    {
                        XMLHttp=new XMLHttpRequest();
                        
                    }
                    catch(e)
                    {
                     XMLHttp = false;
                    }
                }
             }
            return XMLHttp;
        }
        function xpr(str)
        {
            var XMLHttp=CreateXMLHttpRequest();
    XMLHttp.open("get","check_other.asp?action=xpr&p_id="+str+"&"+new Date().getTime(),true);
            XMLHttp.onreadystatechange=function()
            {
                if(XMLHttp.readyState==4)
                {
                
                    if(XMLHttp.status==200)
                    {
                      var pnum=XMLHttp.responseText; 
                      document.getElementById("xpr").innerHTML=pnum;
                    }
                }
            }
    XMLHttp.send(null);
    }
    ------------------------------返回的pnum------------------------
    <select name="pr_id" id="pr_id">
    <option value="">选择产品...</option>
    <option value="1">A产品</option>
    <option value="2">B产品</option>
    <option value="3">C产品</option>
    </select>
      

  15.   

    <%
    Dim action
    action = Request.QueryString("action")
    If action <> "" Then
    Response.Write Request.QueryString("p_id")
    Response.End
    End If%><script>
    function CreateXMLHttpRequest() 
      {
      var XMLHttp=false;
      try
      {
      XMLHttp=new ActiveXObject('Msxm12.XMLHTTP');
      }
      catch(e)
      {
      try
      {
      XMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch(e)
      {
      try
      {
      XMLHttp=new XMLHttpRequest();
       
      }
      catch(e)
      {
      XMLHttp = false;
      }
      }
      }
      return XMLHttp;
      }
      function xpr(str)
      {
      var x=CreateXMLHttpRequest();
      if(!x)
      {
       alert("不能创建")
       return
       }
      x.open("get","a.asp?action=xpr&p_id="+str+"&"+new Date().getTime(),true);
      x.onreadystatechange=function()
      {
      if(x.readyState==4)
      {
       
      if(x.status==200)
      {
      var pnum=x.responseText; 
      document.getElementById("xpr").innerHTML=pnum;
      }
      }
      }
    x.send(null);
    }</script><select name="pr_id" id="pr_id">
    <option value="">选择产品...</option>
    <option value="1">11</option>
    <option value="2">22</option>
    </select>
    <input type="button" onclick="xpr(quzhi('pr_id'))" value="提交" />
    <script>
    function quzhi(str){
    var obj;
    obj=document.getElementById(str);
    if(obj!=null){
    for(var i=0;i<obj.options.length;i++){
    if(obj.options[i].selected){
    return obj.options[i].value;
    }
    }
    }
    }
    </script>
    <div id=xpr></div>
      

  16.   

      //注意:为了测试,这里的地址改成了本页地址
      x.open("GET","a.asp?action=xpr&p_id="+str+"&"+new Date().getTime(),true);
      

  17.   


    可能是我表达没清楚,,,你误解我的意思了================================================
    <select name="pr_class" id="pr_class" onchange="xpr(this.value);">...</select>
    通过选择这个下拉菜单,触发ajax,返回值替换<span id="xpr">...</span>中的<select name="pr_id" id="pr_id"...</select>内容然后点击提交 获取替换后的产品下拉菜单所选值
      

  18.   

    在FF3用document.getElementById(str);有问题。请用document.getElementsByTagName
      

  19.   


    谁说的FF3用document.getElementById有问题?
      

  20.   

    你要重新生成select啊?
    可以这样啊obj=document.getElementById(str);
    obj.length=0
    然后
    obj.options[obj.options.length] = new Option("x","xx")
    即可重新生成select。
      

  21.   

    <%
    Dim action
    action = Request.QueryString("action")
    If action <> "" Then
     pid = Request.QueryString("p_id")
     If pid = "1" Then
      Response.Write "<select name='pr_id' id='pr_id' onchange='xpr(this.value)'><option value=''>测试下拉1</option><option value='1'>A产品</option><option value='2'>B产品</option><option value='3'>C产品</option></select>"
     ElseIf pid = "2" Then
      Response.Write "<select name='pr_id' id='pr_id' onchange='xpr(this.value)'><option value=''>测试下拉2</option><option value='1'>A产品AAAA</option><option value='2'>B产品AAAAA</option><option value='3'>C产品AAAA</option></select>"
     ElseIf pid = "3" Then
      Response.Write "<select name='pr_id' id='pr_id' onchange='xpr(this.value)'><option value=''>测试下拉3</option><option value='1'>A产品AAAA</option><option value='2'>B产品AAAAA</option><option value='3'>C产品AAAA</option></select>"
    Else
    Response.Write "<select name='pr_id' id='pr_id'><option value=''>无需选择产品...</option></select>"
     End If
    Response.End
    End If%>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><script>
    function CreateXMLHttpRequest() 
      {
      var XMLHttp=false;
      try
      {
      XMLHttp=new ActiveXObject('Msxm12.XMLHTTP');
      }
      catch(e)
      {
      try
      {
      XMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch(e)
      {
      try
      {
      XMLHttp=new XMLHttpRequest();
       
      }
      catch(e)
      {
      XMLHttp = false;
      }
      }
      }
      return XMLHttp;
      }
      function xpr(str)
      {
      var x=CreateXMLHttpRequest();
      if(!x)
      {
       alert("不能创建")
       return
       }
      x.open("GET","a.asp?action=xpr&p_id="+str+"&"+new Date().getTime(),true);
      x.onreadystatechange=function()
      {
      if(x.readyState==4)
      {
       
      if(x.status==200)
      {
      var pnum=x.responseText; 
      document.getElementById("xpr2").innerHTML=pnum;
      }
      }
      }
    x.send(null);
    }</script>
    <span id="xpr2">
    <select name="pr_id" id="pr_id" onchange="xpr(this.value)">
    <option value="">选择产品...</option>
    <option value="1">11</option>
    <option value="2">22</option>
    </select>
    </span>
      

  22.   

    当数据量大的时候,这种new Option写法会使代码也变得很庞大,
      

  23.   


    厄,,辛苦了,,不过写的不是我要的 ,,,我是要点击button进行提交,里面onclick还会包含其他参数,如果直接写在select里,那用户操作会无法操作其他选项ajax只替换<span id="xpr">...</span>里的select内容,提交的按钮则在原来的位置没变也没被替换
      

  24.   

    innerHTML也是没问题的啊,上面的例子都在ff3.6,chrome,oprea,safari下测试过了
      

  25.   

    document.getElementById("xpr").innerHTML=pnum;
    这不是你自己写的吗??
    这哪里是
    ajax只替换<span id="xpr">...</span>里的select内容
    啊??
    你都没把问题搞清楚
      

  26.   

    是啊 替换ID为xpr的内容,也就是替换<span id="xpr">..</span>里的内容 - -! 估计是我表达有问题默认的
    <select name="pr_class" id="pr_class" onchange="xpr(this.value);">...</select>
    <span id="xpr"><select name="pr_id" id="pr_id" disabled><option value="">选择产品...</option></select></span>
    <input type="button" value="提交" onclick="window.location.href='?action=pi&pr_id='+ quzhi('pr_id')">ajax后的
    <select name="pr_class" id="pr_class" onchange="xpr(this.value);">...</select>
    <span id="xpr"><select name="pr_id" id="pr_id"><option value="">选择产品...</option><option value="1">A产品</option><option value="2">B产品</option><option value="3">C产品</option></select></span>
    <input type="button" value="提交" onclick="window.location.href='?action=pi&pr_id='+ quzhi('pr_id')">这样写应该就清楚了,红色部分是替换前后,提交按钮没有参与ajax
      

  27.   

    你服务端返回红色的部分字符串,然后执行
    document.getElementById("xpr").innerHTML=xmlhttp.responseText
    不就变成你想要的结果了吗?