【问题标题】:Ajax dependable drop down list issue in Internet ExplorerInternet Explorer 中的 Ajax 可靠下拉列表问题
【发布时间】:2012-04-27 19:55:19
【问题描述】:

我的网页中有两个下拉列表,一个依赖于另一个。我正在使用的 Ajax 代码在 Chrome、Mozilla 中运行良好,但在 IE 中运行良好(我使用的是 IE9)。有人可以帮我纠正这个问题吗?

这是 Ajax 代码-

 <script language="javascript" type="text/javascript">  
  var xmlHttp  
  var xmlHttp

  function showSubCategory(str){
      if (typeof XMLHttpRequest != "undefined"){
      xmlHttp= new XMLHttpRequest();
      }
      else if (window.ActiveXObject){
      xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
      }
      if (xmlHttp==null){
      alert("Browser does not support XMLHTTP Request")
      return;
      } 
      var url="jsp/subcategory.jsp";
      url +="?count=" +str;
      xmlHttp.onreadystatechange = stateChange1;
      xmlHttp.open("GET", url, true);
      xmlHttp.send(null);
      }

      function stateChange1(){   
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){   
      document.getElementById("subcat").innerHTML=xmlHttp.responseText   
      }   
      } 

这是下拉列表所在的主 jsp 页面。--

 <table>
     <tr>
<td align="right" width="10%">Category </td>
<td>
   <select id='category' name="adv.categoryNo" onchange="showSubCategory(this.value)">  
       <option >Select the Category</option>  
     <%
Class.forName("com.mysql.jdbc.Driver").newInstance();  
Connection con1 = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","user","pwd");  
Statement stmt1 = con1.createStatement();  
ResultSet rs1 = stmt1.executeQuery("Select * from categories");
while(rs1.next()){
    %>
    <option value="<%=rs1.getString(2)%>"><%=rs1.getString(2)%></option>  
    <%
}
    %>
    </select>                                  
     </td>
    </tr>

   Second drop down list 


    <tr>
      <td align="right" width="10%">Subcategory <span class="mandatory">*</span>: </td>
       <td>
         <div id='subcategory'>  
         <select id='subcat'  name='subcategory'>  
         <option >Select the Subcategory</option>  
         </select>  
         </div>
    </td>
    </tr>

这里是 Ajax 调用的 subcategory jsp 文件。

<%@page import="java.sql.*"%>
 <%
  String category=request.getParameter("count");  
   String buffer="<select name='adv.subCategoryNo'><option >Select the Subcategory</option>";  
 try{
  Class.forName("com.mysql.jdbc.Driver").newInstance();  
  Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","user","pwd");  
  Statement stmt = con.createStatement();  
  ResultSet rs = stmt.executeQuery("Select * from subcategories where     categoryName='"+category+"' ");  
   while(rs.next()){
   buffer=buffer+"<option value='"+rs.getString(3)+"'>"+rs.getString(3)+"</option>";  
   }  
    buffer=buffer+"</select>";  
    response.getWriter().println(buffer); 
    }
   catch(Exception e){
    System.out.println(e);
    }
   %>

奇怪的是,如果我将 Ajax 代码的以下函数中的 getElementById 参数从“subcat”更改为“subcategory”是覆盖第二个下拉列表的 div id,它在 IE 和其他浏览器中运行良好。

function stateChange1(){   
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){   
      document.getElementById("subcat").innerHTML=xmlHttp.responseText   
      } 

如果我遵循上述方法,我将无法使用以下 JS 代码对该子类别选择框进行任何 javascript 表单验证。

 function madeSelectionCity(){
  var subcat = document.getElementById('subcat');
if(subcat.value == "Select the City name"){
    alert("Please select a subcategory first");
    subcat.focus();
    return false;
}else{
    return true;
}
 }

希望我的问题很清楚。如果需要更多解释,请告诉我。谢谢

【问题讨论】:

  • 你能把 XMLHttpRequest 对象的 responseText 贴出来吗?
  • 请让我知道我的答案是否有效。
  • 我已经编辑了我的答案。请看一下。对您的第一条评论的回答是肯定的,更改 html 代码,它应该可以工作。
  • 'buffer=buffer+""; response.setContentType("text/html") ; response.getWriter().println(buffer);'
  • 点击我的答案左侧的“右”(点击后变为绿色)标记,您已经接受了我的答案并将其标记为已解决。除此之外,您还可以通过单击 0 上方的向上箭头(我的答案左侧)来投票赞成我的答案

标签: javascript ajax internet-explorer drop-down-menu


【解决方案1】:

更改以下代码行(在 ajax 代码调用的 subcategory.jsp 中)

 String buffer="<select name='adv.subCategoryNo'><option >Select the Subcategory</option>";  

 String buffer="<select id='subcat' name='adv.subCategoryNo'><option >Select the Subcategory</option>";  

并添加这行代码(在 ajax 代码调用的 subcategory.jsp 中)

response.setContentType("text/html");

在网页(主页)上,html应该是

 <div id='subcategory'>
 </div>

和ajax(主页)代码应该是

function stateChange1(){   
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){   
      document.getElementById("subcategory").innerHTML=xmlHttp.responseText   
      } 

【讨论】:

  • 你的意思是,我应该在我的主 jsp 上更改此代码-
    到 just-
    那么 Select 列表会发生什么?它在页面中显示得如何?
  • 你能告诉我我应该在哪里准确地添加这一行--- response.setContentType("text/html");
  • 感谢拉维的快速回复。但我现在在我的工作场所,我无法访问我的项目。我会实施你的答案,一定会让你知道。非常感谢。
  • 嗨,拉维……它奏效了。非常感谢你的帮助。当我只放
    时,最初第二个选择框没有出现。只有在第一个下拉列表中选择了一个选项时才会出现。所以我把它改成了---
    ..它现在工作得很好。你能解释一下这里的问题吗?我接受你的回答。
  • 如何接受这个答案并将这个问题标记为已解决?我是stackoverflow的新手...
猜你喜欢
  • 2019-03-29
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多