Felix Riesterer: Eigenen Prompt entwickeln

Beitrag lesen

Lieber Beat,

die "originale" propmpt-Methode hält die Ausführung von JavaScript komplett an. Während das Eingabefenster geöffnet ist, tut sich in JS-Land garnichts.

Du willst nun auch eine Benutzerabfrage tätigen. Dazu musst Du eine Funktion schreiben, die "zweigleisig" fährt. Entweder deshalb, weil Du sie aufrufst, um zu fragen, oder deshalb, weil Du sie zur Auswertung der Antwort aufrufst.

Du brauchst also eine Eigenschaft, die prüft, ob der Aufruf die Frage, oder die Antwort ist.

Ich habe soetwas schonmal in Verbindung mit meinen Inline Popups gemacht. Das Ergebnis findest Du in meiner Dateiverwaltung.

Hier der Code, den ich dafür benutze:

// erstellt ein Popup mit einer Ja/Nein-Frage  
// @parameter "frage": String  
// @parameter "werte": Array mit zwei Strings (das sind die Werte von und für die Funktion "DateiVerwaltung.abschicken", die nach diesem Popup bei "ja" erneut aufgerufen wird!)  
confirm : function (frage, werte) {  
    if (typeof(InlinePopup) == "undefined")  
        return window.confirm(frage);  
  
    var votum = DateiVerwaltung.confirmation.confirm;  
    DateiVerwaltung.confirmation.confirm = false;  
    DateiVerwaltung.confirmation.values = werte;  
  
    if (!DateiVerwaltung.confirmation.win) {  
        frage = frage.replace(/\n/gi, "</p>\r\n<p>");  
        var fenster = InlinePopup.open("", "confirm", "resizeable=no,statusbar=no,width=400,height=350");  
        fenster.document.open();  
        fenster.document.writeln('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');  
        fenster.document.writeln('<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">');  
        fenster.document.writeln('<head>');  
        fenster.document.writeln('<title>Best&auml;tigen</title>');  
        fenster.document.writeln('<link rel="stylesheet" type="text/css" href="' + DateiVerwaltung.cmsRoot + 'css/dateiverwaltung.css" />');  
        fenster.document.writeln('<script type="text/javascript" src="' + DateiVerwaltung.cmsRoot + 'js/inlinepopup/inlinepopup_close.js"></script>');  
        fenster.document.writeln('<script type="text/javascript">');  
        fenster.document.writeln('function ergebnis(str) {');  
        fenster.document.writeln('    parent.DateiVerwaltung.confirmation.confirm = (str == "ja");');  
        fenster.document.writeln('    if (str == "ja") {');  
        fenster.document.writeln('        parent.DateiVerwaltung.xmlhttp.toDo = function () {');  
        fenster.document.writeln('            var win = self.parent.DateiVerwaltung.confirmation.win;');  
        fenster.document.writeln('            self.parent.DateiVerwaltung.confirmation.win = null;');  
        fenster.document.writeln('            win.close();');  
        fenster.document.writeln('        };');  
        fenster.document.writeln('        parent.DateiVerwaltung.abschicken(parent.DateiVerwaltung.confirmation.values);');  
        fenster.document.writeln('    } else {');  
        fenster.document.writeln('        self.parent.DateiVerwaltung.confirmation.win = null;');  
        fenster.document.writeln('        self.close();');  
        fenster.document.writeln('    }');  
        fenster.document.writeln('}');  
        fenster.document.writeln('</script>');  
        fenster.document.writeln('</head><body id="bestaetigungs-fenster">');  
        fenster.document.writeln('<h1>Sicherheits-R&uuml;ckfrage</h1>');  
        fenster.document.writeln('<p><img src="' + DateiVerwaltung.cmsRoot + 'images/cms/warn-frage.gif" alt="" class="linksbuendig" /></p>');  
        fenster.document.writeln('<p>' + frage + '</p>');  
        fenster.document.write('<p class="neue-zeile"><button id="ja" type="button" onclick="ergebnis(\'ja\')"><img src="' + DateiVerwaltung.cmsRoot + 'images/cms/haken16x16.gif" alt="" /> Ja</button>');  
        fenster.document.writeln('<button id="nein" type="button" onclick="ergebnis(\'nein\')"><img src="' + DateiVerwaltung.cmsRoot + 'images/cms/x16x16.gif" alt="" /> Nein</button></p>');  
        fenster.document.writeln('</body></html>');  
        fenster.document.close();  
  
        DateiVerwaltung.confirmation.win = fenster;  
    }  
  
    return votum;  
},  

Liebe Grüße,

Felix Riesterer.

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