NULL: Inputfeld leeren

Warum leert der folgende Code das Input-Feld namens "chat" nicht ???

<html>
<head>
<script language="Javascript">
function doSubmit()
{
   if(document.chatform.chat.value == '')
   {
      alert('Please enter some text!');
      document.chatform.chat.focus();
      return false;
   }

document.chatform.submit();
   document.chatform.chat.value = '';
   document.chatform.chat.focus();
   return true;
}
</script>

</head>
<body style="background-color:#B8D3EF">
<form onSubmit="return doSubmit" action="chat.php" method="POST" target="chatwindow" name="chatform">
<input type="text" name="chat">
<input type="submit" value="send">
</form>

</body>
</html>

  1. Warum leert der folgende Code das Input-Feld namens "chat" nicht ???

    tut's nicht?
    Keine Fehlermeldung?
    http://glasgoogle.de

    <html>
    <head>
    <script language="Javascript">
    function doSubmit()
    {
       if(document.chatform.chat.value == '')
       {
          alert('Please enter some text!');
          document.chatform.chat.focus();
          return false;
       }

    document.chatform.submit();
       document.chatform.chat.value = '';
       document.chatform.chat.focus();
       return true;
    }
    </script>

    </head>
    <body style="background-color:#B8D3EF">
    <form onSubmit="return doSubmit" action="chat.php" method="POST" target="chatwindow" name="chatform">

    Weil deine funktion, nie aufgerufen wird. Mach doch einfach mal, statt "return doSubmit" ein alert(doSubmit), dann siehst du was das return zurückgibt.

    Du willst stattdessen:
    <form onSubmit="return doSubmit(this)" action="chat.php" method="POST" target="chatwindow" name="chatform">

    und sparst dir in deiner Funktion ein wenig schreibarbeit:
    function doSubmit(f)
    {
     if(!f.chat.value)
     {
    alert('Please enter some text!');
    f.chat.focus();
    return false;
    }
    f.chat.value = '';
    f.chat.focus();
    return true;
    }

    Das submit ist überflüssig, bzw doppelt gemoppelt, da du das Formular ja schon abschickst.

    Struppi.

    1. Moin!

      Du willst stattdessen:
      <form onSubmit="return doSubmit(this)" action="chat.php" method="POST" target="chatwindow" name="chatform">

      und sparst dir in deiner Funktion ein wenig schreibarbeit:
      function doSubmit(f)
      {
       if(!f.chat.value)
       {
      alert('Please enter some text!');
      f.chat.focus();
      return false;
      }
      f.chat.value = '';
      f.chat.focus();
      return true;
      }

      Das submit ist überflüssig, bzw doppelt gemoppelt, da du das Formular ja schon abschickst.

      Denkste! Das ist genau deswegen da, damit das Formular abgeschickt wird, _bevor_ das Formularfeld geleert wird. Denn sonst würde ja immer ein leeres Feld abgeschickt.

      Ich finde allerdings auch, dass dieser Ansatz nicht sehr gut ist. Ich würde das target des Formulars _nicht_ auf das Chattextfenster setzen, sondern ohne Target arbeiten. Der abgesendete Text resultiert in einem neuen, leeren Formular. Dieses Formular kann onload das Chattextfenster neu laden lassen (was ja sowieso regelmäßig neu geladen werden muß).

      Und schon sind viele Probleme verschwunden.

      - Sven Rautenberg

      --
      "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)