Hallo,
ich hab gerade ein Problem und weiß nicht weiter. Beim Klicken auf einen Button wird mit Javascript (window.open) eine Seite geöffnet, welche nur für eine kleine Eingabe dient. Ich wollte, dass wenn ich in der Seite den Speicherbutton gedrückt habe, die Seite noch ein paar Sekunden offen ist und sich dann selbstständig schließt.
Ich hab es bis jetzt so versucht:
btnSaveDayTimes.Attributes.Add("onclick", "window.setTimeout(\"window.close();\",3000);");
Doch leider passiert da nix, auch wenn ich anstatt window.close() ein alert eingeben passiert nichts. Kann das eventuell mit dem Postback zu tun haben, der ausgeführt wird?
Mir wäre es lieb, wenn es Clientseitig bleiben würde...
Gruß!
Wenn du bei einem Button clientseitig Javascript ausführen willst, muss am Ende immer ein "return false;" stehen -- damit wird der eigentliche PostBack verhindert.
Das ist mir ja bewusst, aber in dem Button-Click Event werden noch Daten in ne DB geschrieben, also kann ich auf den Postback nicht verzichten.
Da liegt dann aber auch der Widerspruch: Ein Postback erfordert klassischerweise ein erneutes Laden der Seite (serverseitig wird ja die gesamte Seite einmal neu erstellt), dein Javascript soll aber im Kontext der "alten" Seite ausgeführt werden.
Du hast denk ich 2 Möglichkeiten:
Du verwendet AJAX um einen asynchronen PostBack auszuführen (Daten in die DB schreiben, alles serverseitige eben) und führst danach dein JavaScript aus
Du machst einen "richtigen" synchronen Postback und schreibst beim Laden der Seite beispielsweise im body onLoad ereignis dein script rein
Ich persönlich würde die erste Möglichkeit bevorzugen, dehnn im Prinzip ist es ja genau das was du machen willst -- asynchron serverseitig etwas ausführen, und danach das Fenster zeitversetzt schließen.
So habe es jetzt anders gelöst.
Nach dem erfolgreicht in die DB geschrieben wurde mache ich folgendes:
ClientScript.RegisterClientScriptBlock(ClientScript.GetType(), "hI", "<script>window.setTimeout(\"window.close();\",3000);</script>");
Danke und Gruß!