Bernd: Ergebnis der Abbrechen Funktion bei window.prompt

Hallo zusammen,
ich habe folgendes Script:

<script type=text/javascript>
Name = window.prompt("Dein Name ist:", "(Dein Name)");
while (Name == "(Dein Name)")
{
window.alert("Gib bitte deinen Namen ein");
Name = window.prompt("Dein Name ist:", "(Dein Name)");
}
window.alert("Hallo " + Name);
</script>

Also: Der Nutzer bekommt ein .prompt Feld zu Gesicht. Voreingestellt ist " (Dein Name) "  - könnte aber auch leer gelassen werden.
Nun sollte der Nutzer dort seinen Namen eingeben, damit ich ihn mithilfe der Variablen wiederverwenden kann. Allerdings kann der Nutzer auch einfach auf 'Abbrechen' klicken.. Das führt dazu, dass die Ausgabe
   "Hallo null"
erscheint.
Ich kenne leider keine Möglichkeit, dass der Nutzer -wenn er auf 'Abbrechen' klickt- doch dazu gebracht wird bei der Namensaufforderung einen Namen einzugeben (mir ist nur wichtig, dass der Nutzer irgendetwas eingibt, das ich dann als Namen verwenden kann, statt dann "null" oder ähnliches angegeben wird)
Wisst ihr wie man das 'Abbrechen' überbrücken/den Wert, den die Variable 'Name' dann annimmt, beeinflussen kann?

  1. Mahlzeit,

    Wisst ihr wie man das 'Abbrechen' überbrücken/den Wert, den die Variable 'Name' dann annimmt, beeinflussen kann?

    Wieso prüfst du nicht Name auf null und weisst dann selbst z.B. "Gast" zu?

    --
    42
  2. Hallo,

    Prüfe, ob Name null ist:

    var userName = '';  
    var question = 'Bitte gib deinen Namen ein:'  
    var placeholder = '(Dein Name)';  
    while (userName === '' || userName === null || userName === placeholder) {  
      userName = window.prompt(question, placeholder);  
    }
    

    Wisst ihr wie man das 'Abbrechen' überbrücken/den Wert, den die Variable 'Name' dann annimmt, beeinflussen kann?

    Wieso willst du das tun? Der Rückgabewert null ist gut dazu geeignet, um ihn von anderen Werten zu unterscheiden.

    Wie auch immer, man kann den Wert nicht beeinflussen und auch nicht den Abbrechen-Knopf verschwinden lassen.

    Mathias

    1. Hallo,

      Prüfe, ob Name null ist:

      var userName = '';

      var question = 'Bitte gib deinen Namen ein:'
      var placeholder = '(Dein Name)';
      while (userName === '' || userName === null || userName === placeholder) {
        userName = window.prompt(question, placeholder);
      }

        
      Zuerst einmal vielen Dank dafür!  
      Klappt damit genau so wie ich es wollte.  
        Aber eine Frage hätte ich noch: Ich kenne nur  
      Name = " ";  
      oder  
      Name == " ";  
      wofür stehen die 3 '='?  
        Name === " ";
      
      1. Om nah hoo pez nyeetz, Bernd!

        wofür stehen die 3 '='?

        var x = '42';
        (x == 42) // true;
        (x === 42) // false;

        Es gibt Programmiersprachen, da werden die Variablentypen nach Bedarf hin und her umgewandelt. Solche Sprachen nennt man lose typisiert.

        Der String '42' ist gleich der Zahl 42. Das bietet Vorteile, weil man zum Beispiel die Umwandlung von Werten in Inputfeldern, die immer Zeichenketten sind, nicht von Hand machen muss.

        Aber der String '42' ist nicht die Zahl 42.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Lego und Legolas.

    2. Hach ja...
      Das Script bringt den Nutzer nun dazu, dass er die Eingabeaufforderung nicht los wird ohne etwas zu schreiben.
      Es ist zwar nicht mein Problem wenn er irgendeinen Buchstabensalat eintippt aber wie ich grade bemerkt habe kann man die Eingabeaufforderung mit einem 'Leerzeichen' "überlisten". Das macht den Sinn dann wieder zu Nichte: "Hallo "
      Nun könnte ich zwar auch folgendes Schreiben:
      while (Name == "" || Name == " " || Name == "  " || Name == "   " || Name == null)
      aber das hat doch nun wenig Sinn..
      Gibt es eine Möglichkeit die maximale Eingabelänge festzulegen? Oder gibt es eine elegante Möglichkeit diesen 'Leerzeichen' vorzubeugen?

      Bernd

      1. Om nah hoo pez nyeetz, Bernd!

        Gibt es eine Möglichkeit die maximale Eingabelänge festzulegen? Oder gibt es eine elegante Möglichkeit diesen 'Leerzeichen' vorzubeugen?

        Ja, und zwar für moderne Browser mit dem pattern-Attribut.

        Mit Javascript kannst du die Eigenschaft http://de.selfhtml.org/javascript/objekte/string.htm#length@title=length nutzen, aber auch dann kann man „      “ eingeben. Du könntest in einer Schleife mit der Methode http://de.selfhtml.org/javascript/objekte/string.htm#substring@title=substr() Leerzeichen am Anfang und am Ende der Zeichenkette entfernen.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Nut und Nutella.

        1. Mit Javascript kannst du die Eigenschaft http://de.selfhtml.org/javascript/objekte/string.htm#length@title=length nutzen, aber auch dann kann man „      “ eingeben. Du könntest in einer Schleife mit der Methode http://de.selfhtml.org/javascript/objekte/string.htm#substring@title=substr() Leerzeichen am Anfang und am Ende der Zeichenkette entfernen.

          Matthias

          Mhh.. hört sich gut an, allerdings weiß ich nicht wie ich das mit der Schleife machen soll.. Das Javascript müsste doch dann zwischen Buchstaben und Leerzeichen unterscheiden können - oder wie glaubst du könnte es funktionieren?
          Nach deinem Ansatz würde ich zuerst eine .length einbauen und dannach mit substr() die Buchstabenkette von den Leerzeichen trennen, richtig?

          Bernd

      2. Hallo,

        Hach ja...
        Das Script bringt den Nutzer nun dazu, dass er die Eingabeaufforderung nicht los wird ohne etwas zu schreiben.

        Ich dachte, das wolltest du?

        Es ist zwar nicht mein Problem wenn er irgendeinen Buchstabensalat eintippt aber wie ich grade bemerkt habe kann man die Eingabeaufforderung mit einem 'Leerzeichen' "überlisten".

        So etwas lässt sich du mit <http://de.selfhtml.org/javascript/objekte/regexp.htm@title=Regulären Ausdrücken> prüfen. Du kannst z.B. prüfen, ob der String nur aus Whitespace besteht (Beispiel: /^\s+$/). Oder den Whitespace vorne und hinten entfernen (oft trim genannt) und dann die Länge prüfen.

        Gibt es eine Möglichkeit die maximale Eingabelänge festzulegen?

        Wie gesagt, Strings haben eine Länge, die du prüfen kannst.

        Mathias

        1. So etwas lässt sich du mit <http://de.selfhtml.org/javascript/objekte/regexp.htm@title=Regulären Ausdrücken> prüfen. Du kannst z.B. prüfen, ob der String nur aus Whitespace besteht (Beispiel: /^\s+$/). Oder den Whitespace vorne und hinten entfernen (oft trim genannt) und dann die Länge prüfen.
          Mathias

          Genau sowas bräuchte ich..
          Meine Überlegung wäre mit  replace() zu arbeiten. Dies wäre für mich kein Problem, wenn ich den Namen mit  input ~~  abfragen würde.. Bei meinem Script wollte ich eigentlich den Namen mit  window.prompt  abfragen. Die Frage, die sich mir nun stellt, lautet: Wie kann ich mit  replace()  - oder was auch immer - an der Nutzereingabe bei  window.prompt  rumbasteln? Ich hoffe da weiß jemand Rat.

          Bernd

          1. Hi,

            Meine Überlegung wäre mit  replace() zu arbeiten. Dies wäre für mich kein Problem, wenn ich den Namen mit  input ~~  abfragen würde.. Bei meinem Script wollte ich eigentlich den Namen mit  window.prompt  abfragen. Die Frage, die sich mir nun stellt, lautet: Wie kann ich mit  replace()  - oder was auch immer - an der Nutzereingabe bei  window.prompt  rumbasteln? Ich hoffe da weiß jemand Rat.

            Warum meinst Du, daß es einen Unterschied macht, wie der String eingegeben wurde?

            Du hast in beiden Fällen (input/prompt) einen String vorliegen (einmal per .value aus dem input geholt, das andere Mal aus dem return-Wert von window.prompt).

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.