<textarea> per ENTER senden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Lustig, dass dieses Thema nach so langer Zeit wieder aufkommt

    Erstens einmal ist Javascript case sensitive, du musst also "Event" schreiben und nicht "EVENT".
    Zweitens ist mir gerade aufgefallen, dass dieses Script bei alten Browsern nicht korrekt laufen würde... da ist mir ein Fehler unterlaufen!
    Code:
    document.getElementById("nachricht").onkeydown = function(e){
     e = e || window.event;
     var key = e.keyCode || e.which || e.charCode, shift = e.modifiers & Event.SHIFT_MASK || e.shiftKey; // <-- so
     // sollte es korrekt sein, z.B. für Netscape. Die meisten Browser unterstützen aber so oder so shiftKey
     if(key == 13 && !shift){
      send();
      return false;
     }
    }
    Muss afaik auch e.SHIFT_MASK heißen. <-- das stimmt afaik nicht... SHIFT_MASK ist ne Konstante!


    Dieses Script gehört eigentlich nicht in den Header ausser es ist wird mit einem Delay ausgeführt:
    Code:
    _shift = function(e){
     e = e || window.event;
     var key = e.keyCode || e.which || e.charCode, shift = e.modifiers & Event.SHIFT_MASK || e.shiftKey;
     if(key == 13 && !shift){
      send();
      return false;
     }
    }
    setTimeout("document.getElementById('nachricht').onkeydown = _shift;", 50);

    Kommentar


    • #17
      Ok verstehe...

      hab es jetzt so:

      Code:
      <script type="text/javascript">
      	document.getElementById("nachricht").onkeydown = function(e){
      	 e = e || window.event;
      	 var key = e.keyCode || e.which || e.charCode, Shift = e.SHIFT_MASK || e.shiftKey;
      	 if(key == 13 && !Shift){
      	  send();
      	  return false;
      	 }
      	}
      </script>

      Code:
      <textarea id="nachricht" name="nachricht" style="height:70px; width:375px;" ></textarea>
      jetzt schreibet er hier:
      if(key == 13 && !Shift){
      das bei Zeichen 4 ein Obekt erwartet wird... das passiert aber nur wenn ich ENTER drücken... wenn ich SHIFT + ENTER drücke macht er einen Zeilenumbruch... so wie es sein soll. Nur leider sendet das Formular noch nicht... sonden was wird wie gesagt noch eine Objekt erwartet.

      Gruß Nordin

      //EDIT
      oh erstmal den Beitrag über mir hier lesen... haben sich geschnitten...

      Kommentar


      • #18
        wahrscheinlich hast du keine Funktion, die "send" heisst...
        Das ist nur eine Beispielsfunktion... Die Funktion send steht hier als Platzhalter für zum Beispiel document.form.submit() (submit()) oder für document.getElementById("submit_button").click(), etc. (submit() ist hilfreicher, da du sonst auch noch mit attachevent etc. arbeiten musst). Du kannst auch direkt eine AJAX Funktion einbinden, was bei etwas Chat- ähnlichem wohl am sinnvolsten und wahrscheinlichsten ist.

        Kommentar


        • #19
          Ok vergessen wir mal meinen Beitrag hier drüber und machen hier weiter mit dem was du grad geschrieben hast.

          So langsam versteh ich es immer besser... aber wenn ich es so mache wie du gesagt hast bekomme ich den Fehler "Event inst undefiniert".

          Wenn du mir jetzt noch genau so super erklären kannst was das bedeutet dann bin ich fast am ziel und in sachen js schlauer gewurden.

          Danke für deine lehrreiche Hilfe!!

          //Edit wieder haben sich die beitrgäge geschnitten *g*

          Kommentar


          • #20
            kannst du mir bitte mal deinen Beispielcode geben und den Browser wos nicht funktioniert?

            Kommentar


            • #21
              wahrscheinlich hast du keine Funktion, die "send" heisst...
              lool das wars...

              DANKE !!!

              Ich hab es jetzt so:

              Code:
              <form name="chatfenster" action="link.php" method="post">
              
                <textarea id="nachricht" name="nachricht"></textarea>
              
                <script type="text/javascript">
                  document.getElementById("nachricht").onkeydown = function(e){
                    e = e || window.event;
                    var key = e.keyCode || e.which || e.charCode, Shift = e.SHIFT_MASK || e.shiftKey;
                    if(key == 13 && !Shift){
                      document.chatfenster.submit();
                      return false;
                    }
                  }
                </script>
              
                <input type="submit" name="send_newmess" value="Senden" />
              
              </form>
              Mal wieder super Hilfe hier bekommen so wie man gewöhnt ist

              Kommentar


              • #22
                Sry, aber das ist leider immer noch falsch beim Netscape funktioniert das nicht immer...
                Jetzt einmal ein Beispiel, welches im Netscape, Mozilla, Firefox, IE und Opera funktioniert (HTML ist nicht valide, aber das brauchst du ja auch nicht)
                Code:
                <html><head><script>send = function(){document.getElementById('nachricht').value = "";};_shift = function(e){
                 e = e || window.event;
                 var key = e.keyCode || e.which || e.charCode, shift = e.modifiers ? e.modifiers & Event.SHIFT_MASK : e.shiftKey;
                 if(key == 13 && !shift){
                  send();
                  return false;
                 }
                }
                setTimeout("document.getElementById('nachricht').onkeydown = _shift;", 50);</script></head><body><textarea id="nachricht"></textarea></body></html>
                Fehlender Event kam wohl im IE zum Vorschein... hab ehrlich gesagt nicht daran gedacht, dass es dort die Konstante nicht gibt, da es das Element Event als solches auch nicht gibt

                Kommentar


                • #23
                  Also wenn ich es jetzt mache wie du geschrieben hast funktioniert es tatsächlich im FF aber leider nicht mehr im IE

                  Es kommt kein Fehler... er sendet nur nicht...

                  Aber falls es hilft, mir ist durch zufall aufgefallen das es mit meinem letzem beispiel im IE sendet... aber im FF leider nicht... ich hatte ausversehen aus "Event.SHIFT_MASK" ein "Event.SSHIFT_MASK" gemacht und so ging es im FF... aber dafür nicht mehr im IE *g* vielleicht hilft es dir ja irgendwie...
                  Zuletzt geändert von Nordin; 06.05.2008, 23:59.

                  Kommentar


                  • #24
                    Welche Version hast du? Wenn du eine Datei mit dem Inhalt benutzt, den ich in meinen letzten Post geschrieben habe geht es zumindest im IE 7 problemlos.
                    Sobald Enter gedrückt wird wird es gesendet, wenn shift+enter aber erscheint ein absatz. du kannst auch Text reinschreiben und der wird bei einem alleinigen drücken von Enter gelöscht. Das Löschen nimmt die Funktion send vor in diesem Fall.

                    Kommentar


                    • #25
                      Hab den IE7...


                      Ich habe es so im <head>

                      Code:
                      <script type="text/javascript">
                      send = function(){document.getElementById(\'nachricht\').value = "";};_shift = function(e){
                       e = e || window.event;
                       var key = e.keyCode || e.which || e.charCode, shift = e.modifiers ? e.modifiers & Event.SHIFT_MASK : e.shiftKey;
                       if(key == 13 && !shift){
                        document.chatfenster.submit();
                        return false;
                       }
                      }
                      setTimeout("document.getElementById(\'nachricht\').onkeydown = _shift;", 50);
                      </script>
                      und die textarea so im body:
                      Code:
                      <textarea id="nachricht" name="nachricht" style="height:70px; width:360px;" ></textarea>
                      Im FF funktioniert es wie es soll und im IE macht er den Zeilenumbruch mit Shift+Enter auch super aber wenn ich nur Enter drücke macht er ebenfals einen Zeilenumbruch.

                      Kommentar


                      • #26
                        übernimm einmal genau meine neuste Version...
                        Du hast da noch einen Teil von der ersten Version.
                        Bei Enter löst es bei dir send() gar nicht aus, denn du hast das mit document.chatfenster.submit(); ersetzt. document.chatfenster kann aber nicht gefunden werden... deswegen bricht das Script ab und es wird auch kein false zurückgegeben. Weil false nicht zurückgegeben wird, wird die Tastatureingabe ganz normal verarbeitet.

                        Nochmals den selben Code wie oben schon... So funktioniert es:
                        Code:
                        <html>
                        <head>
                        <script type="text/javascript">
                        send = function(){document.getElementById('nachricht').value = "";};_shift = function(e){
                         e = e || window.event;
                         var key = e.keyCode || e.which || e.charCode, shift = e.modifiers ? e.modifiers & Event.SHIFT_MASK : e.shiftKey;
                         if(key == 13 && !shift){
                          send();
                          return false;
                         }
                        }
                        setTimeout("document.getElementById('nachricht').onkeydown = _shift;", 50);
                        </script>
                        </head>
                        <body>
                        <textarea id="nachricht" name="nachricht" style="height:70px; width:360px;" ></textarea>
                        </body>
                        </html>

                        Kommentar


                        • #27
                          document.chatfenster kann aber nicht gefunden werden...
                          na doch weil ich mach doch nen formular mit den namen... alá

                          Code:
                          <form name="chatfenster" action="'link.php" method="POST">
                          <textarea></textarea>
                          <input type="submit" />
                          </form>

                          Kommentar


                          • #28
                            wie wäre zur Initialisierung mit einem:
                            Code:
                            window.onload = function(){
                            doSomething();
                            }
                            vllt. interessiert dich ja auch das framework prototype.
                            Dort sind die Events ganz gut gestaltet, besonders mit Scopes.

                            http://www.prototypejs.org/api/event

                            das ginge dann z.b. so:

                            Code:
                            window.observe('load', function() {
                              doSomething();
                            });
                            Zuletzt geändert von zerni; 07.05.2008, 16:22.
                            Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                            - ...und solche Behauptungen in "falsches Resourcenmanagement"

                            Kommentar


                            • #29
                              DANKE!

                              So funktioniert es scheinbat im IE UND FF

                              Code:
                              <form name="chatfenster" action="link.php" method="post">
                              
                                <textarea id="nachricht" name="nachricht"></textarea>
                              
                                <script type="text/javascript">
                                  document.onload = function(){document.getElementById('nachricht').value = "";};_shift = function(e){
                                    e = e || window.event;
                                    var key = e.keyCode || e.which || e.charCode, shift = e.modifiers ? e.modifiers & Event.SHIFT_MASK : e.shiftKey;
                                    if(key == 13 && !shift){
                                      document.chatfenster.submit();
                                      return false;
                                    }
                                  }
                                  setTimeout("document.getElementById('nachricht').onkeydown = _shift;", 50);
                                </script>
                              
                              
                                <input type="submit" name="send_newmess" value="Senden" />
                              
                              </form>
                              Zuletzt geändert von Nordin; 07.05.2008, 15:34.

                              Kommentar


                              • #30
                                Code:
                                <form name="chatfenster" action="link.php" method="post">
                                
                                  <textarea id="nachricht" name="nachricht"></textarea>
                                
                                  <script type="text/javascript">
                                    document.onload = function(){document.getElementById('nachricht').value = "";}; // das brauchst du nicht! das War nur für das Beispiel
                                // onload würdest du nur im Head benutzen, nicht im Body
                                _shift = function(e){
                                      e = e || window.event;
                                      var key = e.keyCode || e.which || e.charCode, shift = e.modifiers ? e.modifiers & Event.SHIFT_MASK : e.shiftKey;
                                      if(key == 13 && !shift){
                                        document.chatfenster.submit();
                                        return false;
                                      }
                                    }
                                    setTimeout("document.getElementById('nachricht').onkeydown = _shift;", 50);// da du das Javascript im Body eingefügt hast brauchst du das auch nicht
                                  </script>
                                
                                
                                  <input type="submit" name="send_newmess" value="Senden" />
                                
                                </form>
                                besser
                                Code:
                                <form name="chatfenster" action="link.php" method="post">
                                  <textarea id="nachricht" name="nachricht"></textarea>
                                  <script type="text/javascript">
                                document.getElementById('nachricht').onkeydown = function(e){
                                      e = e || window.event;
                                      var key = e.keyCode || e.which || e.charCode, shift = e.modifiers ? e.modifiers & Event.SHIFT_MASK : e.shiftKey;
                                      if(key == 13 && !shift){
                                        document.chatfenster.submit();
                                        return false;
                                      }
                                    }
                                  </script>
                                
                                
                                  <input type="submit" name="send_newmess" value="Senden" />
                                
                                </form>
                                Wenn du mit onload arbeiten willst machst du es am besten gleich mit dem gewünschten Element. Also mit document.getElementById('nachricht')

                                Kommentar

                                Lädt...
                                X