Kalle_B: Window leeren

Hallöle,

aus einer Liste heraus kann ich Personen zum Ändern anklicken. Per Javascript öffne ich ein Fenster, in dem das Änderungsformular erscheint:
//=======================================================
  function zeigAdressformular( adr_kz, adr_unt, adr_id )
//=======================================================
{
  var url = "[PHP_SELF]?zp=p102&kw=[kw]&ll=[ll]&adr_kz=" +adr_kz +"&adr_unt=" +adr_unt +"&adr_id=" +adr_id;
//alert( url );
  F1 = window.open(url,"fenster_102","width=1000,height=600,left=10,top=10,scrollbars=yes,resizable=yes");
  F1.focus();
} //================================================

Wenn ich danach eine andere Person zum Ändern anklicke, erscheint dasselbe Fenster sofort im Vordergrund, jedoch mit den alten Daten. Wenn nun die Übertragung besonders langsam ist, dauert es, bis die Daten der neuen Person erscheinen. Der Benutzer ist irritiert.

Pfiffig wäre ein F1.clear(), das gibt es aber nicht.

Alternativ könnte ich vorher F1.close() machen, gibt beim erstenmal einen Fehler, wenn F1 noch nicht vorhanden ist. Wie fragt man die Existenz ab?

Kalle

  1. Wie fragt man die Existenz [eines Objektes in JS] ab?

    Indem man sie abfragt ;)

    Also im Klartext, einfach per IF abfragen, ob entsprechendes Objekt schon vorhanden ist - siehe:

      
      
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">  
    <!--  
    [code lang=javascript]  
    var a=1;  
    if (a) {  
     alert ("a vorhanden");  
    }  
    if (b) {  
     alert ("b vorhanden (aber diesen Text wirst du nie lesen)");  
    }  
    
    

    //-->
    </SCRIPT>

    [/code]

    Gruß,
    DL

    1. Wie fragt man die Existenz [eines Objektes in JS] ab?

      Indem man sie abfragt ;)

      Aja, hätte ich drauf kommen sollen:
        if ( exists(F1)) alert( F1 );

      FF Fehler-Konsole: "F1 is not defined"

      Also im Klartext, einfach per IF abfragen, ob entsprechendes Objekt schon vorhanden
      var a=1;
      if (a) {
      alert ("a vorhanden");
      }

      Ach so, also
        if ( F1 ) alert( "F1 schon vorhanden" );

      FF Fehler-Konsole: "F1 is not defined"

      So gehts also nicht. Und auch so nicht:

      if ( F1 == "undefined" ) alert( "F1 fehlt" ); else alert( "F1 schon vorhanden" );

      Jetzt brauche ich einen positiven Tipp.

      Kalle

      1. Jetzt brauche ich einen positiven Tipp.

        OK - nimm "typeof"

          
        var a=1;  
        if(typeof a != 'undefined') {  
         alert("a existiert");  
        }  
        if(typeof b != 'undefined') {  
         alert ("b existiert [eben nicht]");  
        }  
        
        

        Sorry - aber mein Firebug war deaktivert. Und da mein
        Mini-Test unten kein Fehler ausgab... Wenn man sich
        schonmal auf Technik verlässt...

        Gruß,

      2. hi,

        if ( F1 == "undefined" ) alert( "F1 fehlt" ); else alert( "F1 schon vorhanden" );

        Jetzt brauche ich einen positiven Tipp.

        Nein, einen type, und zwar of.

        http://de.selfhtml.org/javascript/sprache/operatoren.htm#typeof

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. Hallo Kalle_B,

        F1 muss schon vor dem ersten Öffnen des Fensters existieren.

          
        var F1=null; // sollte global sein, wenn open in Funktion.  
        if(!F1 || F1.closed) F1=window.open(...); 
        

        d.H. öffne Fenster nur, wenn F1 noch nicht belegt oder wenn F1 schon wieder geschlossen.

        Gruß, Jürgen

  2. Hallöle,

    danke für euren Hinweis auf typeof.

    Der Ansatz ist jedoch nicht ganz richtig. Wenn ich aus der Adress- Übersicht einige Adressen geändert habe, rufe ich die Liste (also das anzeigende Programm) neu auf.

    Damit ist natürlich mein typeof(F1) verloren.
      F1 = window.open(url,"fenster_102","width=1000,height=600,left=10,top=10,scrollbars=yes,resizable=yes");

    Das alte Window "fenster_102" ist aber immer noch da und wird von der neuen Instanz der Liste auch recycled.

    Ich muss also Fragen, ob das Fenster "fenster_102" vorhanden ist. Wenn ja, muss ich es vor der Neubefüllung leeren oder schließen, damit der alte Inhalt während der Ladezeit nicht verwirrt.

    Leider habe ich keine Idee, wie das zu realisieren ist.

    Kalle

    1. hi,

      Der Ansatz ist jedoch nicht ganz richtig.

      Wieso verwundert mich das nicht sonderlich ...?

      Wenn ich aus der Adress- Übersicht einige Adressen geändert habe, rufe ich die Liste (also das anzeigende Programm) neu auf.

      Damit ist natürlich mein typeof(F1) verloren.

      Logisch.

      Das alte Window "fenster_102" ist aber immer noch da und wird von der neuen Instanz der Liste auch recycled.

      Dann öffne ein neues Fenster mit dem gleichen Namen - dadurch bekommst du wieder eine Referenz auf dieses Popup, wenn es noch geöffnet ist.

      Wenn ja, muss ich es vor der Neubefüllung leeren oder schließen, damit der alte Inhalt während der Ladezeit nicht verwirrt.

      Dann öffne zunächst die Adresse about:blank darin, und lasse anschliessend ein anderes Dokument hineinladen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }