Rolf B: Ausblick auf 2022: window.alert('Hallo Welt') geht nicht mehr?

Beitrag lesen

Hallo Raketenschnellschießer,

Defaultwerte für Parameter sind nicht die einzige mögliche Lösung.

function schrei(text, okText, focusAfterClose)
{
   okText = okText || 'OK';
   ...

   if (focusAfterClose && focusAfterClose.focus)
      focusAfterClose.focus();
}

D.h. das Verhalten der JS-Operatoren für || und && beim Umgang mit truthy/falsy-Werten nutzen, um den falsy-Wert undefined gegen 'OK' auszutauschen. Und das zu fokussierende Element kannst Du gleich als Parameter übergeben. Alternativ könnte man auch einen Selektor übergeben statt einer ID und diesen mit querySelector verwenden.

Und statt eines Buttons wäre ein Array richtig. Je Eintrag ein Button.

Die andere Alternative ist ein options-Objekt. Da könnte man dann auch noch einen Callbackhandler unterbringen, der aufzurufen ist, wenn der Dialog geschlossen wird, so dass sich die "Warte auf OK" Funktion von alert nachbilden lässt.

Für modernere Browser kann man auch noch ein Promise zurückgeben. So zum Beispiel:

function Alarm(text, options) {
   options = options || {};
   options.buttons = options.buttons || [ 'OK' ];

   if (Promise)
      return new Promise(alarmCore);
   else
      return alarmCore();

   function alarmCore(resolve, reject) {
      // tu dies, tu das

      function alarmButtonAction(event) {
         // fenster schließen
         let response = event.target.value;
         if (typeof options.success == 'function')
            options.success(response);
         if (resolve)
            resolve(response);
         if (options.focusAfterClose) {
            if (typeof options.focusAfterClose == 'string')
               document.querySelector(options.focusAfterClose).focus()
            if (typeof options.focusAfterClose.focus == 'function')
               options.focusAfterClose.focus();
         }
      }  
   }
}

Alarm("Spam im Forum!", {
   buttons: [ 'OK', 'Egal' ],
   focusOnClose: '#someElement',
})
.then( btn => if (btn == 'OK') sendmail("Spam im Forum"));

Man kann so ein kleines Dings unglaublich weit ausbauen 😂

Rolf

--
sumpsi - posui - obstruxi