GreenAssaulter: Mauscursor vor und nach Prozess ändern

Hallo,

ich habe eine JavaScript-Function mit einem längeren Prozess (Eigenschaften verschiedene Elemente müssen gesetzt werden). Deshalb möchte ich VOR Prozessbegin den Mousecursor auf "wait" setzten und DANACH wieder auf "default":

(1)document.getElementById("theBody").style.cursor = 'wait';
(2).... Prozess .....
(3)document.getElementById("theBody").style.cursor = 'default';

("theBody" ist die ID des Body-TAGS)

Leider wird der Cursor nur dann tatsächlich auf "wait" gesetzt, wenn ich unmittelbar nach (1) z.B. ein alert-Fenster aufmache. Warte-Aktionen wie window.setTimeout("empty()",1000) bringen leider nichts... wie kann ich das setzen des Cursors erzwingen?

  1. Hi!

    Ich weiß nicht, ob das was bringt, aber du kannst versuchen deinen Quelltext folgendermaßen umzubauen:

    Versuch mal, das gesamte Body-Tag per JavaScript zu verändern (ich glaube das geht mit outerHTML).

    Bis jetzt habe ich (falls wirklich zwingend notwendig!!) solch dynamische Veränderung immer mit einer Veränderung des Quelltextes via JS vorgenommen, und das hat bis jetzt stets geklappt.

    Wie gesagt, versprechen kann ich's nicht, aber probieren geht über studieren!

    cu

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!!!
    SELFCode: ss:| zu:) ls:[ fo:} de:[ va:} ch:? sh:) n4:° rl:? br:^ js:( ie:% fl:) mo:)
    http://emmanuel.dammerer.at/selfcode.html
  2. Hi GreenAssaulter,

    (1)document.getElementById("theBody").style.cursor = 'wait';
    (2).... Prozess .....
    (3)document.getElementById("theBody").style.cursor = 'default';

    Wie sieht denn das Script aus?
    Wie rufst du die Änderung des Cursors auf?
    Wie rufst du die zweite Änderung auf?
    Wekche Aktion soll die Äbderung bewirken?
    Fragen über Fragen, die alle ohne ausreichende Informationen einer Glaskugel bedürfen.

    Gruß

    Kurt

    --
    > Nein, ich beantworte keine Anfragen per e-mail.
    "Misstrauen ist eine schlechte Ruestung, die mehr hindern als schirmen kann."  (George Lord Byron; engl. Dichter; 1788-1824)
    http://elektro-dunzinger.at
    http://shop.elektro-dunzinger.at
    1. Hi GreenAssaulter,

      (1)document.getElementById("theBody").style.cursor = 'wait';
      (2).... Prozess .....
      (3)document.getElementById("theBody").style.cursor = 'default';

      Wie sieht denn das Script aus?

      Das Script ist eine function, die (1),(2) und (3) in genau dieser Reihefolge enthält.

      Wie rufst du die Änderung des Cursors auf?

      Mit Zeile (1).

      Wie rufst du die zweite Änderung auf?

      Mit Zeile (3).

      Wekche Aktion soll die Äbderung bewirken?

      ???
      Das setzten des Cursors in den Styleangaben soll den Cursor ändern.
      Das funktioniert prinzipiell ja auch, nur dass der Browser das nur dann macht, wenn man ihn direkt nach setzten des Cursors z. B. durch Aufruf eines alert-Fensters pausieren lässt.

      Fragen über Fragen, die alle ohne ausreichende Informationen einer Glaskugel bedürfen.

      Gruß

      Kurt

      1. Hi GreenAssaulter,

        Jetzt habe ich mal 10 Minuten überlegt, ob du mich verarschen willst.
        Soweit bin ich in meinen Überlegungen nämlich schon selbst gekommen.
        Das Posting sollte dich eigentlich darauf hinweisen, daß in diesem Fall das gesamte relevante Script interessant wäre, damit man sich die Abläufe besser vorstellen kann.
        Einen kleinen Hinweis hast du ja schon selbst gegeben: Es funktioniert, wenn der Aufruf nach Abarbeitung des Prozesses kurz pausiert.
        Nachdem du nun mit den Daten so geizt, bleibt mir nur ein Schuss ins Blaue: setze einen Timeout beim Aufruf des betroffenen Scriptteiles.

        Gruß

        Kurt

        --
        > Nein, ich beantworte keine Anfragen per e-mail.
        "Kraft wird aus dem Zwang geboren und stirbt an der Freiheit."  (Leonardo da Vinci; it. Universalgenie; 1452-1519)
        http://elektro-dunzinger.at
        http://shop.elektro-dunzinger.at
        1. Moin,

          wie schon im Anfangsposting erwähnt bringt das Setzten eines Timeouts nichts (anders als beim Verändern eines innerHTML-Wertes zum Beispiel).

          Meine Funktion sieht also in etwa so  aus:

          function myFunction(){
              document.getElementById("theBody").style.cursor = 'wait';
              // Stelle (x)
              for (var i = 0; i < einArray.length ; i++){
                 // diverse Styleveränderungen anderer Elemente
              }
              document.getElementById("theBody").style.cursor = 'default';
          }

          Wenn ich an Stelle (x) also einen Timeout setze und eine leere Funktion ausführen lasse bzw. den Rest von myFunction in einer externen Funktion ausführen lasse, bringt das bezüglich des Mousecursors nichts...

          Gruss,

          Jan

          P.S.: Es liegt mir fern, hier irgendwen zu verarschen.

          1. Hi GreenAssaulter,

            Moin,

            wie schon im Anfangsposting erwähnt bringt das Setzten eines Timeouts nichts (anders als beim Verändern eines innerHTML-Wertes zum Beispiel).

            Meine Funktion sieht also in etwa so  aus:

            function myFunction(){
                document.getElementById("theBody").style.cursor = 'wait';
                // Stelle (x)

            Das bringt sicherlich nix, da der Rest trotzdem abgearbeitet wird.

            for (var i = 0; i < einArray.length ; i++){
                   // diverse Styleveränderungen anderer Elemente
                }
                document.getElementById("theBody").style.cursor = 'default';
            }

            Erstmal fällt mir auf, dass du nicht sauber geklammert hast.
            Versuchs mal so:

            function myFunction()
            {
              {
               document.getElementById("theBody").style.cursor = 'wait';
              }
              { <-- Ob die Ebene nötig ist, musst du testen, denke aber schon.
               for (var i = 0; i < einArray.length ; i++)
                {
                 // diverse Styleveränderungen anderer Elemente
                }
              } <-- Dito.
              {
               document.getElementById("theBody").style.cursor = 'default';
              }
            }

            Oder lagere die Styleanweisungen in eine eigene Funktion aus und rufe diese im Script an geeigneter Stelle auf.
            Mir scheint hier ein Fehler aufgrund falscher Schachtelung wahrscheinlich.
            Ich hab das jetzt mal nur aus dem Stegreif gemacht und nicht getestet, weil ich weg muss, also selber probieren. ;-)

            Gruß

            Kurt

            --
            > Nein, ich beantworte keine Anfragen per e-mail.
            "Zur Unterhaltung einer Party traegt niemand so viel bei wie diejenigen, die gar nicht da sind."  (Audrey Hepburn; engl.-am. Schauspielerin; 1929-1993)
            http://elektro-dunzinger.at
            http://shop.elektro-dunzinger.at
            1. Moin,

              das mit den Klammern ist im Prinzip ein guter Rat, Danke. Hab aber den Fehler jetzt gefunden:

              die Funktion wird direkt durch anklicken eines <A>-Tags aufgerufen. Diese hat natürlich ihre eigenen Einstellungen, was den Cursor bezüglich mouseover und mouseout angeht. Bei meinem Funktionsaufruf wird der Cursor zwar gesetzt, doch wenn ich mich noch über dem <A>-Tag befinde, wird er sofort wieder zurückgesetzt, da ja die onmouseover-Direktive des Tags greift.

              Hab jetzt ein Workaround gemacht, indem ich das <A>-Tag durch ein <Span> ersetzt habe, bei dem ich selber bestimme, wie die Cursoreigenschaften jeweils sind. Dabei wird dann noch ein Flag abgefragt, damit der Cursor-Status nicht im falschen Moment verändert wird.

              War 'ne schwere Geburt, aber finally it works. :-)

              Danke auch für Deine Hilfe!

              1. Hi GreenAssaulter,

                Genau das war der Grund, warum ich so penetrant nachgefragt habe.
                Durch einen unscheinbaren Umstand, den du nicht erwähnt hast, ist alles ganz anders.
                Ich habe vorher die Funktion bei mir nämlich nachgebaut(mit Klammerung) und da hat es wie gewünscht funktioniert, in allen möglichen Variationen.
                Dass du dir deine Einstellungen aber selbst überschreibst, davon hat ja niemand etwas ahnen können.
                Deshalb wäre es auch wichtig gewesen, wenn du auch den zugehörigen Aufruf gepostet hättest, dann hätte ich mir eine Menge Arbeit erspart, weil mir der Fehler vermutlich sofort ins Auge gesprungen wäre.

                Gruß

                Kurt

                --
                > Nein, ich beantworte keine Anfragen per e-mail.
                "Was noch zu leisten ist, das bedenke, was du schon geleistet hast, das vergiss."  (Marie von Ebner-Eschenbach; oest. Schriftstellerin; 1830-1916)
                http://elektro-dunzinger.at
                http://shop.elektro-dunzinger.at