J'ai une page qui sur une certaine action rend un iframe visible et remplit l'iframe avec du HTML (disons par exemple une boîte multi-sélection et un bouton ok).Changer la visibilité ne cache pas immédiatement iFrame
Le bouton OK de la iframe a la méthode onClick définie un peu comme ceci:
onClick="parent.hideIFrame();parent.processMultiSelectBox();"
Lorsque l'utilisateur clique sur OK sur le iframe (probablement après avoir joué avec la boîte multi-sélection), je voudrais la iFrame à disparaître immédiatement, puis les valeurs sélectionnées dans la zone de sélection multiple peuvent être traitées. Mais ce n'est pas ce qui se passe. L'iFrame reste visible pendant la durée de fonctionnement de l'autre fonction et ne disparaît qu'une fois la deuxième fonction terminée.
La fonction hideIFrame est assez simple:
function hideIFrame() {
frmObj = document.all.iFrameID;
if(frmObj) {
frmObj.style.visibility = "hidden";
}
}
J'ai paraphrasé la fonction ci-dessus pour plus de clarté (supprimé certaines affectations de variables d'indicateurs, etc.)
La deuxième fonction des boucles en fait sur toutes les options l'objet multi-sélection et fait des choses avec elle. Cela prend environ une demi-seconde et seulement après que cela soit fait, mon iFrame disparaît. C'est un peu gênant de le voir s'attarder une demi-seconde quand je clique sur ok. Ma question est de savoir s'il y a moyen de faire disparaître la chose si vite. Parlant dans le jargon «classique C», y a-t-il un «flush» pour que le changement de visibilité se produise immédiatement?
J'ai remarqué que si je mets une "alerte" comme première ligne dans ma deuxième fonction, l'iframe disparaît immédiatement mais maintenant c'est le OK sur la boîte d'alerte qui persiste pendant le temps que prend la deuxième fonction pour finir .
Merci.
EDIT: Sur la base de la réponse de DDaviesBrackett, ce que je fini par faire:
Le onclick dans le iframe changé:
onClick="parent.hideAndProcessMultiSelectBox(parm1, parm2);"
La fonction hideAndProcessMultiSelectBox a été définie comme:
function hideAndProcessMultiSelectBox(parm1, parm2) {
hideIFrame();
setTimeout(function() { processMultiSelectBox(parm1, parm2); }, 0);
}
Voila .. aucun délai ..
Vous pourriez être sur quelque chose ici. Je suis juste en train de me battre avec les paramètres que je dois passer au "processMultiSelectBox". Une fois que je peux les faire partir, je vais mettre à jour .. Merci. – Adnan
réponse modifiée pour fournir un mécanisme permettant de transmettre des paramètres à la fonction timeouted. –
Oui, cela a fonctionné. J'ai toujours des problèmes pour passer des paramètres à la fonction, mais je l'ai testé avec une fonction fictive qui fait un long calcul de boucle imbriqué. – Adnan