Ich habe eine Seite, die auf einer bestimmten Aktion macht einen iframe sichtbar und füllt den iframe mit etwas HTML (sagen Sie zum Beispiel ein Multi-Auswahlfeld und eine Schaltfläche OK).Ändern der Sichtbarkeit nicht sofort iFrame
Die OK-Taste auf der iframe hat das ein bisschen wie folgt definiert onClick Methode:
onClick="parent.hideIFrame();parent.processMultiSelectBox();"
Wenn Benutzer klickt auf dem iframe OK (vermutlich mit der Multi-Select-Box nach dem Spiel), ich mag iFrame verschwindet sofort und dann können die ausgewählten Werte in der Mehrfachauswahlbox verarbeitet werden. Aber das ist nicht was passiert. Der iFrame bleibt während der Ausführung der anderen Funktion sichtbar und verschwindet erst, wenn die zweite Funktion beendet ist.
Die hideIFrame Funktion ist ziemlich einfach:
function hideIFrame() {
frmObj = document.all.iFrameID;
if(frmObj) {
frmObj.style.visibility = "hidden";
}
}
ich die obige Funktion für Klarheit umschrieben habe
Die zweite Funktion Schleifen auf allen Optionen tatsächlich (einige Indikatoren Variablenzuweisungen usw. entfernt) in das Multi-Select-Objekt und macht Sachen damit. Das dauert ungefähr eine halbe Sekunde und erst danach ist mein iFrame verschwunden. Es ist ein wenig störend zu sehen, dass es für eine halbe Sekunde verweilt, wenn ich ok klicke.
Meine Frage ist, ob es einen Weg gibt, wie ich das verdammte Ding schneller verschwinden lassen kann. Sprechen Sie im "klassischen C" -Lingo, gibt es einen "Flush" für die Änderung der Sichtbarkeit, um sofort zu geschehen?
Ich habe bemerkt, dass wenn ich eine "Warnung" als erste Zeile in meiner zweiten Funktion, der iframe sofort verschwindet, aber jetzt ist es die OK in der Alarm-Box, die für die Zeit dauert die zweite Funktion zu beenden .
Danke.
EDIT: Basierend auf DDaviesBrackett Antwort, ist es das, was ich tun endete:
Die Onclick in der iframe geändert:
onClick="parent.hideAndProcessMultiSelectBox(parm1, parm2);"
Die hideAndProcessMultiSelectBox Funktion wurde wie folgt definiert:
function hideAndProcessMultiSelectBox(parm1, parm2) {
hideIFrame();
setTimeout(function() { processMultiSelectBox(parm1, parm2); }, 0);
}
Voila .. keine Verzögerung ..
Sie könnten hier etwas unternehmen. Ich rang nur mit den Parametern, die ich an die "processMultiSelectBox" übergeben muss. Sobald ich sie dazu bringen kann zu gehen, werde ich updaten .. Danke. – Adnan
Antwort bearbeitet, um einen Mechanismus zum Übergeben von Parametern an die Timeout-Funktion bereitzustellen. –
Ja das hat funktioniert. Ich habe immer noch Probleme, Parameter an die Funktion zu übergeben, aber ich habe es mit einer Dummy-Funktion getestet, die eine langwierige Nested-Loop-Berechnung durchführt. – Adnan