Georf: wait() oder try()

Hallo,
Ich versuche gerade eine eigene Art eines Prompts zu realisieren, aber leider bin ich auf ein sehr großes Problem gestoßen, wodurch ich mir sehr viel Arbeit machen müsste.
Ich erzeugen mit einer Funktion ein neues Div mit einem oder mehreren Input-Text Feldern und darunter einen Button. Wenn man auf den Button drückt, soll die Funktion den Wert des Input-Feldes zurückgeben.
Bsp:
function my_prompt() {
  ....//Hier folgen die Aufrufe um ein Div mit inhalt zu erzeugen
  Input.id="test";

wait(Submit.Onclick);
  return Input.value;
}

So in der Art habe ich mir das vorgestellt, aber mit den DOM Varianten des OnClick Events kann ich ja nur auf Element Außerhalb der Funktion (zB andere Funktionen) zurückgreifen.
Gibt es eine Möglichkeit den return so lange zu verzögern, bis jemand auf den Button drückt.
Vielen Dank schon mal für eure Antworten...
Georf

  1. Hallo,

    Bsp:
    function my_prompt() {
      ....//Hier folgen die Aufrufe um ein Div mit inhalt zu erzeugen
      Input.id="test";

    wait(Submit.Onclick);
      return Input.value;
    }

    es gibt keine wait-Funktion, wie du sie dir vorstellst.

    mit javascript ist die Vorgehensweise anders:

    du baust dein Formular und sagst dem Formular, welche Funktion es aufrufen soll, wenn es beendet wird. Fertig.

    der Eventhandler stösst dann den nächsten Schritt ( die Verarbeitung der Eingabe) an.

      
    <form action="" onsubmit="return my_submit(this)" >  
    <input id="test" name="elem1" type="text"  .... value="abc" >  
    ....  
    <input type="submit" value="los" >  
    </form>  
    
    
      
    function my_submit(formular) {  
     verarbeite( formular.elem1.value);  
     return false; // form action blockieren  
     }  
      
    function verarbeite(input_wert) {  
      // tu was  
     }  
    
    

    Wie man einem Eventhandler sagt, mit welchen Parametern er eine Funktion aufrufen soll, hat Struppi z.B. heute hier erklärt: https://forum.selfhtml.org/?t=161438&m=1050205

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·
    1. Ich kenne die Möglichkeit, wie ich Events zuweise.
      Ich wollte mir aber eigentlich einen Adäquaten Ersatz für die normale Prompt-Funktion selber bauen. Dadurch könnte man die das Design und die genaue Position auf der Seite selber bestimmen und es dem Benutzer ermöglichen schneller zu arbeiten. (Vom Design mal ganz abgesehen).

      Wenn ich das jetzt richtig verstehe, gibt es also keine Möglichkeit eine eigene Prompt Funktion zu basteln ohne ihr zu sagen, was bei einer Eingabe passieren soll. Für mich wäre das nicht gerade sehr ans OOP gehalten, weil man dann für jedes Mal, wo ich so etwas einsetzen will immer einen neues Fenster programmieren müsste.

      Falls jemand doch noch eine Möglichkeit findet oder schon kennt dieses Problem zu umgehen, kann er es ja trotzdem noch melden.
      Danke schon mal.

      1. Hallo,

        Ich wollte mir aber eigentlich einen Adäquaten Ersatz für die normale Prompt-Funktion selber bauen.

        Das sollte schon gehen. Du setzt z.B. eine Variable
        var responded = false;
        und statt wait() einfach eine Schleife
        while(!responded){}
        Das ist dann eine Endlosschleife, solange responded nicht zu true evaluiert. Dein onklick-Handler kann dann irgenwann
        responded = true;
        setzen, so dass die Schleife schließlich verlassen wird.

        Gruß, Don P

        1. Moin Moin!

          Das sollte schon gehen. Du setzt z.B. eine Variable
          var responded = false;
          und statt wait() einfach eine Schleife
          while(!responded){}
          Das ist dann eine Endlosschleife, solange responded nicht zu true evaluiert. Dein onklick-Handler kann dann irgenwann
          responded = true;
          setzen, so dass die Schleife schließlich verlassen wird.

          Und so lange läuft die CPU mit 100%, bis irgendwann hoffentlich der Browser beschließt, dass das Script Amok läuft und anbietet, dem Script den Gnadenschuß zu geben.

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          1. Hallo Alexander,

            weil es so schön passt:

            http://aktuell.de.selfhtml.org/artikel/javascript/timer/

            Gruß, Jürgen

          2. Hallo,

            Und so lange läuft die CPU mit 100%, bis irgendwann hoffentlich der Browser beschließt, dass das Script Amok läuft und anbietet, dem Script den Gnadenschuß zu geben.

            Mit 100%? Wow, das war mir nicht bewust. Aber es war mir natürlich klar, dass das nicht besonders brauchbar ist. Ich dachte mir nur, wer unbedingt ein wait() will, soll es auch bekommen ;-).

            IMO ist es nicht besonders nett von JavaScript, die Systemressourcen dermaßen in Beschlag zu nehmen. Das ist mir schon unangenehm aufgefallen, als ich einmal verschiedene Programmieransätze gegeneinander antreten lassen wollte, um jeweils die gebrauchte Zeit zu messen. Wenn ein Prozess zu lange dauert, meckert der Browser und die Messung ist im Eimer.

            Gruß, Don P

            1. Hallo Don,

              ... Wenn ein Prozess zu lange dauert, meckert der Browser ...

              hinzu kommt noch, dass viele Browser dann einfrieren. Sie reagieren auf keine Mausklicks mehr, und Änderungen im DOM werden auch nicht gerendert. Ich verwende hier setTimeout oder setInterval anstelle der Schleifen.

              Gruß, Jürgen

  2. Hi Georf

    Das selbe Problem hatte ich bei der Implementierung meiner rudimentären Entwicklungsoberfläche für JavaScript in JavaScript für mein JavaScript-Lern-Tutorial.

    Da kann man mit dem Befehl input() einen Prompt simulieren.
    Also z.B.:

      
    var eingabe=input();  
    
    

    «Gelöst» hab ich das Problem mit einem furchtbar hässlichen Hack:
    Vor der Ausführung wird das Script nach input()s durchsucht, in Blöcke (vor bzw. nach dem input) aufgeteilt und dann die einzelnen Blöcke ausgeführt, mit dem input() dazwischen.
    Das geht dann natürlich nur, wenn input() nicht in einem Code-Block steht.

    Gruss,
    nam