mari: Eigene Dialoge/Popups wie zb confirm(),alert() usw.

Hallo Zusammen,

wie die Überschrift schön sagt würde ich gerne eigene Dialoge gestalten, öffnen und Javascript auswerten.
Das klappt auch eigentlich ganz gut, allerdings gibt der Dialog keinen Wert zurück (wie z.B.: "ok", "false", "cancel" ... ), sondern erwartet für jeden möglichen Ausgang (wie z.B.: "ok", "false", "cancel" ... ) eine Funktion die dann aufgerufen werden soll.

Das hat allerdings zur Folge, dass ich viele verschiedene Funktionen schreibe die eigentlich in eine Einzige müssten, da z.B. Variablen ja nicht automatisch mit übergeben werden und es einfach auch unübersichtlich wird.

Das Fenster soll also einen Wert zurückgeben!
z.B var ergebiss=okCancelPopup("Wollen sie ...");

Meine erste Idee:
-Mit einer Whileschleife auf ein Ereigniss warten:

function OkPopup(caption,message){
  var self=this;
  self.ende=false;
  self.draw = function(){
       ....Hier male ich das Popup und erzeuge den okButton, und hänge das Ganze an den body der Seite.
  document.getElementById("okButton").addEventListener("click",self.ok,false);
  }

self.undraw = function(){
   document.body.removeChild(background);
  }

self.ok = function(){
   self.undraw();
   self.ende=true;
  }

self.draw();

while(!self.ende){
  }
  return "OK";
 }

Funktioniert allerdings nicht, da sich der "Thread" einfach aufhängt und nach einer Zeit das Script vom Firefox gestoppt wird da es sich aufgehängt hat.

Ich hoffe jemand hat eine Idee!
Vielen Dank schonmal im Vorraus

  1. Das hat allerdings zur Folge, dass ich viele verschiedene Funktionen schreibe die eigentlich in eine Einzige müssten, da z.B. Variablen ja nicht automatisch mit übergeben werden und es einfach auch unübersichtlich wird.

    dann tu das

    Meine erste Idee:
    -Mit einer Whileschleife auf ein Ereigniss warten:

    warum?

    <span onclick="dialog('true', 'dialogname');">Ja</span>
    <span onclick="dialog('false', 'dialogname');">Nein</span>
    <span onclick="dialog('cancel', 'dialogname');">Abbrechen</span>

    function dialog(status, name) {
      // hier wird eine funktion/dialogname mit dem entsprechenden status aufgerufen
    }

    1. Das hat allerdings zur Folge, dass ich viele verschiedene Funktionen schreibe die eigentlich in eine Einzige müssten, da z.B. Variablen ja nicht automatisch mit übergeben werden und es einfach auch unübersichtlich wird.
      dann tu das

      ??
      Wie soll ich das denn tun,
      ich möchte folgendes machen:

      function jetztTuMalWas(irgendwas,lala,blub){
        var ding = blub*lala;
        var löschen = okCancelPopup("wollen sie Irgendwas wirklich löschen?");
        if(löschen==true){
          jetzt.löschen();
        }
        return ding*irgendwas;
      }

      Meine erste Idee:
      -Mit einer Whileschleife auf ein Ereigniss warten:

      warum?

      Weil solange nix passieren soll, wie der Dialog nicht geschlossen/beantwortet wurde!

      <span onclick="dialog('true', 'dialogname');">Ja</span>
      <span onclick="dialog('false', 'dialogname');">Nein</span>
      <span onclick="dialog('cancel', 'dialogname');">Abbrechen</span>

      function dialog(status, name) {
        // hier wird eine funktion/dialogname mit dem entsprechenden status aufgerufen
      }

      Dann habe ich aber auch mindestens zwei Funktionen, wobei mir das eine zuviel ist. Beim eingebauten window.promt() wird auch direkt der wert zurückgegeben, den der Benutzer eingegeben hat. (z.B.: var eingabe = window.prompt("Bitte geben Sie einen Text ein:", "");)

      Trotzdem Danke für deine schnelle Antwort.

      1. Weil solange nix passieren soll, wie der Dialog nicht geschlossen/beantwortet wurde!

        function jetztTuMalWas(irgendwas,lala,blub,status){
          if (status == true) {
            // mach alles kaputt und lösche das zeug
            jetzt.löschen();
          } else {
            var ding = blub*lala;
            var löschen = okCancelPopup("wollen sie Irgendwas wirklich löschen?");
          }
        }

        du deine funktion hat einfach zwei zweige, der eine wird nur mit status true ausgeführt, der andere mit sämtlichen status false oder nicht gesetzt

        alternativ kannst du deine funktion auch in 2 funktionen teilen, beim bestätigen wird die zweite ausgeführt

        oder geh ich da jetzt falsch?

        btw: was spricht eigentlich gegen die standard-dialoge, die der benutzer kennt?

        1. Weil solange nix passieren soll, wie der Dialog nicht geschlossen/beantwortet wurde!

          function jetztTuMalWas(irgendwas,lala,blub,status){
            if (status == true) {
              // mach alles kaputt und lösche das zeug
              jetzt.löschen();
            } else {
              var ding = blub*lala;
              var löschen = okCancelPopup("wollen sie Irgendwas wirklich löschen?");
            }
          }

          du deine funktion hat einfach zwei zweige, der eine wird nur mit status true ausgeführt, der andere mit sämtlichen status false oder nicht gesetzt

          "Schön" ist das nicht gerade.

          alternativ kannst du deine funktion auch in 2 funktionen teilen, beim bestätigen wird die zweite ausgeführt

          oder geh ich da jetzt falsch?

          Das will ich ja gerade verhindern =)

          btw: was spricht eigentlich gegen die standard-dialoge, die der benutzer kennt?

          Ich würde auch gerne komplette Formulare anlegen und verarbeiten bzw anzeigen lassen. Die sind ja nicht wirklich vorhanden.

          1. Ich würde auch gerne komplette Formulare anlegen und verarbeiten bzw anzeigen lassen. Die sind ja nicht wirklich vorhanden.

            ggf ist AJAX ja etwas für dich - lass die ausgaben nicht von javascript erzeugen sondern durch ein php script

  2. Liebe mari,

    ich habe mir unter Zuhilfenahme meines InlinePopup eigene confirm()-/alert()-Methoden gebaut. Wenn Dich das Ganze interessiert, dann schau doch einmal hier in den JavaScript-Quelltext: dateiverwaltung.js (ist Bestandteil meiner Dateiverwaltung)

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)