2014-11-25 71 views
0

我正在調試一個老的jsp/javascript頁面,發生了一些奇怪的事情:頁面上有一個帳單搜索表單,十幾個輸入和選擇字段,它是一個struts應用程序,所有其他瀏覽器都可以正常工作,IE 10除外,問題是當您第一次加載頁面時,一切正常,但是如果再次加載該頁面,則輸入字段會凍結,當我將鼠標懸停並單擊字段時,什麼都不會發生,並且它不會讓我輸入信息,如果你第三次加載這個頁面,它再次OK,但是第四次,它被凍結,等等等等。在頁面上有一個「清除」按鈕,當表單被凍結時,你可以點擊按鈕,它將調用一個JavaScript來清除緩存,它會將一些http會話設置爲空並重定向到該頁面,並且輸入字段將再次活躍。如何檢測HTML文本字段是否處於活動狀態?

下面是一些代碼:

<form:form commandName="commandBean" 
    name="billingSearch"> 
     <div id="form-row"> 
     <div id="form-row-left">Carrier Name:</div> 
     <div id="form-row-right"> 
     <form:select path="masterCompany" id="select_style"> 
     <form:options items="${commandBean.masterCompanyList}" itemValue="id" itemLabel="masterCompanyName"/> 
     </form:select> 
     </div> 
     </div> 

     <c:choose> 
     <c:when test="${!commandBean.agent}"> 
      <div id="form-row"> 
      <div id="form-row-left">Agency Name:</div> 
      <div id="form-row-right"> 
      <form:select path="agency" id="select_style"> 
       <form:options items="${commandBean.agencyList}" itemValue="id" itemLabel="agencyName"/> 
      </form:select> 
      </div> 
      </div> 
     </c:when> 
     </c:choose> 
     <c:choose> 
     <c:when test="${!commandBean.agent && !commandBean.mga && !commandBean.insured}"> 
      <div id="form-row"> 
      <div id="form-row-left">Agency Group:</div> 
      <div id="form-row-right"> 
      <form:select path="agencyGroupId" id="select_style"> 
       <form:options items="${commandBean.agencyGroupList}" itemValue="id" itemLabel="groupName"/> 
      </form:select> 
      </div> 
      </div> 
     </c:when> 
     </c:choose> 
    ... 
     <div id="form-row"> 
     <div id="form-row-left">Posting Date:</div> 
     <div id="form-row-right"> 
     <div id="form-row-date"> 
     <div id="date-start-label">Start:</div> 
     <div id="date-start-box"> 
     <form:input path="startDate" size="10"></form:input> 
       <script type="text/javascript"> 
        new tcal ({ 
         'formname': 'commandBean', 
         'controlname': 'startDate' 
        }); 
       </script> 
     </div> 
     <div id="date-end-label">End:</div> 
     <div id="date-end-box"> 
     <form:input path="endDate" size="10" ></form:input> 
       <script type="text/javascript"> 
        new tcal ({ 
         'formname': 'commandBean', 
         'controlname': 'endDate' 
        }); 
       </script> 
     </div> 
     </div> 
     </div> 
     </div> 
     <div id="form-submit-row"> 
     <div id="submit-left"><input name="submit" id="button_style" value="Search" type="submit" /></div> 
     <div id="submit-right"><input onclick="clearBillingCache();" name="reset" id="button_style" value="Clear" type="button" /></div> 
     </div> 
    </form:form> 

... 

function clearBillingCache(){ 
    window.location = "billingSearchClear.html" 
} 

... 


     @RequestMapping(value = "/billingSearchClear.html", method = RequestMethod.GET) 
     public String clearCache(HttpServletRequest request) { 
      String returnVal = "redirect:/billingSearch.html"; 


      request.getSession().setAttribute("stickyCarrier", null); 
      request.getSession().setAttribute("stickyAgency", null); 
      request.getSession().setAttribute("stickyGroup", null); 
    ... 
      request.getSession().setAttribute("stickyStartDate", null); 
      request.getSession().setAttribute("stickyEndDate", null); 

      return returnVal; 
     } 

我已經試過是以下內容添加到JSP頁面,因此它在偶數點擊onload事件調用:

<%! 
    int Counter=0; 
%> 

。 .. <% 如果(++計數器%2!= 0){

%> 
<body onload="clearBillingCache()"> 
<% 
} 
else 
{ 

%> 
<body> 
<% 
} 
System.out.println(" Counter = "+Counter); 
%> 

它甚至點擊刷新,但字段仍然凍結,直到我點擊「清除」按鈕。

而我打印出會話值,它們都是空的。

以前有沒有人遇到過這個問題?如何在沒有點擊清除表單的情況下每次都正確加載表單?

+0

「的一些代碼行」始終是一個壞的問題。你認爲這些線是問題嗎?如果是這樣,爲什麼?你有什麼嘗試和排除或確認你可以添加爲問題的詳細信息?如果你不確定這些行是否重要,那麼添加它們是任意的,因此是一個壞主意。如果可以的話,克隆這個項目,運行克隆副本,並開始刪除代碼,直到達到重現錯誤的最低條件。然後從那裏拿走? – 2014-11-25 00:10:33

回答

0

問題有以下變化解決:

function delay(ms) { 
    var cur_d = new Date(); 
    var cur_ticks = cur_d.getTime(); 
    var ms_passed = 0; 
    while(ms_passed < ms) { 
     var d = new Date(); // Possible memory leak? 
     var ticks = d.getTime(); 
     ms_passed = ticks - cur_ticks; 
     d = null;   // Prevent memory leak? 
    } 
} 

<body onload="delay(300)"> 
相關問題