2010-01-08 5 views
1

J'ai un formulaire qui vérifie si une autre fenêtre est ouverte. Si tel est le cas, il copie les valeurs de deux champs de saisie dans les champs de saisie readonly existants et masque deux zones de texte modifiables en définissant l'élément element.style.display = "none". Si l'autre fenêtre n'est pas ouverte, les champs de saisie readonly sont masqués. Mon problème est que lorsque je mets le textareas 'style.display = "none", IE7 (utilisation mandatée par la politique informatique de l'entreprise) se bloque comme si elle était bloquée dans une boucle infinie. La fonctionnalité fonctionne bien dans Firefox, et ne déclenche aucune erreur dans Firebug. IE7 se bloque si j'essaie de définir l'affichage pour la zone de texte, la ligne de table dans laquelle elle est contenue ou la div contenant. J'ai essayé de cacher plusieurs autres éléments sur ma page, mais cela n'arrive que sur chaque zone de texte.IE7 se bloque lors de la dissimulation de textarea ou d'un conteneur parent

La partie bizarre est que j'ai une autre forme qui est presque identique à l'exception de la forme qu'elle ouvre, et le code fonctionne là. Je suis perplexe.

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"); 
} 
} 

Répondre

1

cernées mon problème. J'appelais une fonction pour ajuster les tailles de toutes les textareas sur la page (montrée ci-dessous). Apparemment, IE n'aime pas faire cela sur des zones de texte cachées et simplement accroché dans une boucle infinie. La solution consistait à déplacer la fonction au-dessus du code en question.

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

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