2010-01-08 40 views
1

我有一個窗體檢查是否打開另一個窗口。如果是這樣,它將兩個輸入字段的值複製到現有隻讀輸入字段,並通過設置element.style.display =「none」隱藏兩個可編輯的textareas。如果其他窗口未打開,則只讀輸入字段將被隱藏。IE7在隱藏textarea或父容器時崩潰

我的問題是,當我設置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

想通了我的問題。我正在調用一個函數來調整頁面上所有textarea的大小(如下所示)。顯然,IE不喜歡在隱藏的textareas上做這件事,只是掛在無限循環中。解決方案是將代碼移到相關代碼的上方。

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

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