隐藏textarea或父容器时IE7崩溃

时间:2010-01-08 20:30:54

标签: javascript html

我有一个表单,检查是否打开了另一个窗口。如果是这样,它会将两个输入字段的值复制到现有的只读输入字段,并通过设置element.style.display =“none”隐藏两个可编辑的textareas。如果未打开另一个窗口,则隐藏只读输入字段。

我的问题是,当我设置textareas的style.display =“none”时,IE7(由公司IT策略强制使用)挂起就好像它被卡在无限循环中一样。该功能在Firefox中运行良好,并且在Firebug中没有引起任何错误。如果我尝试设置textarea的显示,包含它的表行或包含div,IE7会挂起。我试图在我的页面上隐藏多个其他元素,但它只发生在每个textarea上。

奇怪的是,我有另一种形式几乎完全相同,除了它打开的形式,代码在那里工作。我很难过。

HTML:

<table>
   <tr>
   <td class="first"><span>Source of CAPA</span></td>
   <td><span>Tracking Number(s)</span></td>
   </tr>
   <tr id="Normal">
   <td class="first"><textarea id="txtCAPASource" title="Source of CAPA" rows="3" cols="50" onfocus="highlight(this.id);" onblur="imposeMaxLength(this, 1990, event); unhighlight(this.id);" onkeyup="imposeMaxLength(this, 1990, event); adjustTextarea(this, 3);"></textarea></td>
   <td><textarea id="txtCAPATrack" title="Tracking Number" rows="1" cols="25" onfocus="highlight(this.id);" onblur="imposeMaxLength(this, 1990, event); unhighlight(this.id);" onkeyup="imposeMaxLength(this, 1990, event); adjustTextarea(this, 1);"></textarea></td>
   </tr>
   <tr id="Launched">
   <td class="first"><input type="text" id="txtLaunchedCAPASource" title="Launched Source" size="63" maxlength="63" readonly="readonly" class="grayed" /></td>
   <td><input type="text" id="txtLaunchedCAPATrack" title="Launched Tracking Number" size="30" maxlength="30" readonly="readonly" class="grayed" /></td>
   </tr>
   </table><br /><br />

使用Javascript:

    function hide(elementID)
    {
     var element = document.getElementById(elementID);
     element.style.display = "none";
    }

 function Startup()
 {
 if (stepnumber == "1" && document.getElementById("mastercontrol.route.esig.sigstatus.step1").value == "")
 {
  var opener = window.open("","VendQualSum");
  if (opener.document.getElementsByTagName("title")[0] != undefined && opener.document.getElementsByTagName("title")[0].innerHTML == "Vendor Qualification Summary")
  {
   document.getElementById("txtLaunchedCAPASource").value = opener.document.getElementById("txtVendor").value + " " + String.fromCharCode(8212) + " Number: " + opener.document.getElementById("txtVendorEvalNum").value;
   document.getElementById("txtLaunchedCAPATrack").value = opener.document.getElementById("mastercontrol.form.number").value;
   opener.document.getElementById("txtIntCAPANum").value = document.getElementById("mastercontrol.form.number").value;
            opener = "";
   hide("txtCAPASource");
   hide("txtCAPATrack");
  }
  else
  {
   opener.close();
   hide("txtLaunchedCAPASource");
   hide("txtLaunchedCAPATrack");
  }
 }
 else if(document.getElementById("txtLaunchedCAPASource").value != "")
 {
  hide("txtCAPASource");
  hide("txtCAPATrack");
 }
 else
 {
  hide("txtLaunchedCAPASource");
  hide("txtLaunchedCAPATrack");
 }
 }

1 个答案:

答案 0 :(得分:1)

弄清楚我的问题。我正在调用一个函数来调整页面上所有textareas的大小(如下所示)。显然,IE不喜欢在隐藏的textareas上做这个,只是挂在无限循环中。解决方案是将函数移到相关代码上方。

function adjustTextarea(txtArea, minRows)
{
    while (txtArea.rows > minRows && txtArea.scrollHeight < txtArea.offsetHeight)
    {
        txtArea.rows--;
    }

    while (txtArea.scrollHeight > txtArea.offsetHeight)
    {
        txtArea.rows++;
    }
}