2012-09-21 68 views
0

我已经遍寻全面地搜索类似的问题,但不幸的是,没有一个对我来说似乎很有效。 我有一个对话框窗口,在父文档中打开点击。编辑完值后,表单被提交给java servlet,关闭对话框并返回到父对象。在Chrome或Firefox中一切正常,但在IE中,它会打开一个包含响应URL的空白页面。 解决方案应该非常有用,但任何指针都应该没问题。窗体提交对话框窗口在IE中打开一个空白页面

父JSP:

<body class="yui3-skin-sam"> 
    <center> 
     <div id="ok"> 
     <h1>NBReports</h1> 
     <p>New business on call reports</p><br/>   
     <input type="button" value="Add Row" align="right" onclick="javascript: showWindow(window, 1)" /><br/>  
     <div id="tblReportSchedule"></div><br/> 
     <input type="button" value="Add Row" align="right" onclick="javascript: showWindow(window, 1)" /> 
     </div> 
    </center> 
</body> 
<script type="text/javascript"> 

function showWindow(obj, bEdit) 
{ 
    if(bEdit == 1) 
     { 
      openModal("updateSchedule.jsp", 600, 450); 
     } 
    else if(bEdit == 2) 
     { 
      var rowID = obj.parentNode.parentNode.parentNode.parentNode.id; 
      openModal("updateSchedule.jsp", 600, 450, getAllRowValuesbyID(rowID)); 
     } 
    else 
     { 
      var rowID = obj.parentNode.parentNode.parentNode.parentNode.id; 
      openModal("updateSchedule.jsp", 300, 200, getAllRowValuesbyID(rowID).split("/")[0]);    
     } 
} 

function getAllRowValuesbyID(rowID) 
{ 
    var rowValues=""; 
    row = document.getElementById(rowID); 

    for (var i = 0; i < row.childNodes.length; i++) { 
     if((window.navigator.userAgent.toLowerCase().indexOf('windows') == -1)) 
     { 
      var node = row.childNodes[i]; 
      rowValues += node.textContent + "/"; 
     } 
     else 
     { 
      var node = row.children[i]; 
      rowValues += node.outerText + "/"; 
     } 
    } 
    return rowValues; 
} 

function openModal(url, width, height, rowValues) 
{ 
    var features = ""; 
    if (width != "") 
    { 
    features = features + "dialogWidth:" + width + "px;"; 
    } 
    if (height != "") 
    { 
     features = features + "dialogHeight:" + height + "px;"; 
    } 

    var retVal = window.showModalDialog(url, rowValues, features); 

    if(retVal) 
    { 
     document.location.reload(true); 
    } 
} 

</script> 

</html> 

对话形式:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Update Schedule Form</title> 

<script type="text/javascript"> 
    function onSubmit() 
    { 
     window.returnValue = ""; 
     if((window.opType == 3) || window.dirtyFlag) 
     { 
      window.dirtyFlag = 1; 
      window.returnValue = getValue('cronTab') + '/' + 
           getValue('reportName') + '/' + 
           getValue('subject') + '/' + 
           getValue('recipient') + '/' + 
           getValue('cc') + '/' + 
           getValue('database') + '/' + 
           getValue('script') + '/' + 
           getValue('format'); 
     } 
     window.close(); 
    } 

    function getValue(varName) 
    { 
     if(document.getElementById(varName) == null) 
      return ""; 
     if(document.getElementById(varName).value == null) 
      return ""; 
     else 
      return document.getElementById(varName).value; 
    } 

    function setdirtybit() 
    { 
     window.dirtyFlag = 1; 
    } 

    function SubmitForm() 
    { 
     if(window.navigator.userAgent.toLowerCase().indexOf('chrome') == -1) 
     { 
      if(window.dirtyFlag || window.opType == 3) 
      { 
       document.forms["UpdateSchedule"].method="get"; 
       document.forms["UpdateSchedule"].action="/nbreports/updates"; 
       document.forms["UpdateSchedule"].target="_self"; 
       document.forms["UpdateSchedule"].submit(); 
      } 
     } 
    } 

    function GenerateSubmit(valText) 
    { 
     var submitButton = ""; 
     if(window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1) 
      submitButton = "<center><input type ='submit' value='" + valText + "' onclick='onSubmit()' /></center>";    
     else 
      submitButton = "<center><input type ='button' value='" + valText + "' onclick='onSubmit()' /></center>"; 

     return submitButton; 
    } 

    window.onbeforeunload = SubmitForm; 
    </script> 
</head> 
<body> 
    <form name="UpdateSchedule" id = "UpdateSchedule" action="/nbreports/updates" method="get"> 
     <script type="text/javascript"> 
     var valuesArray = new Array(); 
     if(typeof window.dialogArguments == "undefined") 
     { 
      var idArray=["cronTab","reportName","subject","recipient","cc","database","script","format"]; 
      var nameArray=["CronTab","Report Name","Message Subject","Recipient List","Cc","Database","Script","Format"]; 

      var str = "<table cellpadding = '2' border = '0'>"; 

      for(var i = 0; i < 8; i++){ 
       str += "<tr>"; 
       str += "<td><label for='" + nameArray[i]+"'>" + nameArray[i] + "</label></td>"; 
       if(i==3 || i==4){ 
        str += "<td><input style='width:450px' type ='text' id='" + idArray[i] + "' name='" + nameArray[i] + "' onchange='setdirtybit()' /></td>"; 
       } 
       else{str += "<td><input style='width:200px' type ='text' id='" + idArray[i] + "' name='" + nameArray[i] + "' onchange='setdirtybit()' /></td>";} 
       str += "</tr>"; 
      } 
      str += "<tr style='display: none;'><input type='hidden' name='opType' value='1' /></tr>"; 
      str += "</table>"; 

      document.write(str);   
      document.write(GenerateSubmit("Submit")); 
     } 
     else 
     { 
      valuesArray=window.dialogArguments.split("/"); 
      if(valuesArray.length == 1) 
      { 
       document.write("<center><label>Are you sure you want to delete the row?</label><br/><br/></center>"); 
       document.write("<input type='hidden' name='id' value='"+ valuesArray[0] +"' />"); 
       document.write("<input type='hidden' name='opType' value='3' />"); 
       document.write(GenerateSubmit("Ok")); 
       window.opType = 3; 
      } 
      else 
      {  
       var idArray=["cronTab","reportName","subject","recipient","cc","database","script","format","id"]; 
       var nameArray=["CronTab","Report Name","Message Subject","Recipient List","Cc","Database","Script","Format", "Id"]; 

       var str = "<table cellpadding = \"2\" border = \"0\">"; 

       for(var i = 0; i < 8; i++){ 
        str += "<tr>"; 
        str += "<td><label for='" + nameArray[i]+"'>" + nameArray[i] + "</label></td>"; 
        if(i==3 || i==4){ 
         str += "<td><input style='width:450px' type ='text' id='" + idArray[i] + "' name='" + nameArray[i] + "' onchange='setdirtybit()' /></td>"; 
        } 
        else{str += "<td><input style='width:200px' type ='text' id='" + idArray[i] + "' name='" + nameArray[i] + "' onchange='setdirtybit()' /></td>";} 
        str += "</tr>"; 
       } 
       str += "<tr style='display: none;'><input type ='hidden' name='id' value='"+ valuesArray[0] +"'/></tr>"; 
       str += "<tr style='display: none;'><input type ='hidden' name='opType' value='2' /></tr>"; 
       str += "</table>"; 

       document.write(str); 
       for(var i = 0; i < 8; i++){ 
        document.forms[0].elements[nameArray[i]].value = valuesArray[i+1]; 
       } 
       document.write(GenerateSubmit("Submit")); 
      } 
     }    
     </script> 
    </form> 
</body> 

</html> 

回答

0

我认为它的文件撰写的,因为();你可以使用innerHTMl来替换它吗? 而不是, document.write(str); Document.write(GenerateSubmit(“Submit”)); 尝试, document.getElementById(“submitNode”)。innerHTML = str + GenerateSubmit(“Submit”);

记得在id为“submitNode”的表单中添加一个div元素。像这样:

相关问题