Beach: Formularfeld und drücken der Returntaste

Hi,

ich möchste Formular mittels XMLHttpRequest an den server schicken

Wenn ich in einem Textfeld die Returntaste drücke wird der onchange Event ausgelöst. Allerdings wird dann automatisch die Seite neu geladen. Wenn ich das Feld mittels Mausklick verlasse funktioniert alles.

Hat hier jemand ne idee.

Grüße Thomas

-----Datei user.php------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
...
<script type="text/javascript">
/* <![CDATA[ */

var http = null;
if (window.XMLHttpRequest) {
  http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  http = new ActiveXObject("Microsoft.XMLHTTP");
}

function show(feld, id) {                   //Einblenden der standartmäßig ausgeblendeten Formularfelder
  element = document.getElementById("feld_"+feld+"_"+id);
  element.style.display = 'inline';
  element.focus();
}

function update(feld, id) {               //Absenden des Formulars
  if (http != null) {
    http.open("POST", "/ajax/user_sql.php", true);
    http.onreadystatechange = ausgeben;
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    message='sql_id='+id+'&sql_field='+feld+'&sql_value='+document.forms['formular_'+id].elements['feld_'+feld].value;
    http.send(message);
  }
}

function hide(feld, id) {                  // Feld nur verstecken wenn keine Änderung erfolgt ist.
  element = document.getElementById("feld_"+feld+"_"+id);
  element.style.display = 'none';
}

function ausgeben() {
  if (http.readyState == 4) {
    if (http.responseText != '') {
      alert(http.responseText);
    }
  }
}

/* ]]> */
</script>
</head>
<body>

<form name="formular_1" action="">
   <span class="table name" id="text_name_1" onclick="show('name', '1')" title="Benutzername">admin </span>
   <input class="table name" type="text" id="feld_name_1" name="feld_name"  value="admin" onchange="update('name', '1')" onblur="hide('name', '1')" >

<span class="table recht_plan" id="text_recht_plan_1" onclick="show('recht_plan', '1')">W </span>
   <select class="table recht_plan" id="feld_recht_plan_1" name="feld_recht_plan" size="1" onchange="update('recht_plan', '1')" onblur="hide('recht_plan', '1')" >

<option >R</option>
      <option selected>W</option>
      <option >N</option>
    </select>
   <span class="table recht_firmen" id="text_recht_firmen_1"onclick="show('recht_firmen', '1')">W </span>
<select class="table recht_firmen" id="feld_recht_firmen_1" name="feld_recht_firmen" size="1" onchange="update('recht_firmen', '1')" onblur="hide('recht_firmen', '1')" >
      <option >R</option>

<option selected>W</option>
      <option >N</option>
    </select>
   <span class="table recht_firma_zuord">W </span>
   <span class="table recht_benutzer">W </span>
   </div>
   </form>
...
 </body>
 </html>

  1. hi,

    Wenn ich in einem Textfeld die Returntaste drücke wird der onchange Event ausgelöst.

    Schon bei onchange etwas abzuschicken ist normalerweise ungünstig - du weisst nicht, ob ich als Nutzer überhaupt abschicken möchte, oder es mir vielleicht anders überlegt habe. Abschicken von Formulardaten sollte in aller Regel nur auf explizite Anforderung hin geschehen.

    Allerdings wird dann automatisch die Seite neu geladen.

    Ich sehe dich nirgendwo die Default-Reaktion auf Drücken der Returntaste in einem Eingabefeld - nämlich das "normale" Abschicken des Formulars - unterbinden.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Schon bei onchange etwas abzuschicken ist normalerweise ungünstig - du weisst nicht, ob ich als Nutzer überhaupt abschicken möchte, oder es mir vielleicht anders überlegt habe. Abschicken von Formulardaten sollte in aller Regel nur auf explizite Anforderung hin geschehen.

      Da sich das ganze System irgendwann mal ähnlich wie in Excel bedienen lassen soll, (unser bisherige Verwaltung läuft nur über Excel Tabellen :-( ) möchte ich dass beim Verlassen des Feldes die Daten gleich an den Server geschickt werden.
      Andere Felder werden dann mit Daten vom Server aktualisiert. (Jetzt nicht in der Seite aber in anderen)
      Wie gesagt, das ganze soll nur Firmenintern eingesetzt werden. Daher hab ich auch die Freiheit nur für den Firefox und IE zu schreiben. Wenns in den beiden Browsern klappt is es gut.

      Ich sehe dich nirgendwo die Default-Reaktion auf Drücken der Returntaste in einem Eingabefeld - nämlich das "normale" Abschicken des Formulars - unterbinden.

      Da such ich schon die ganze Zeit wie ich das machen kann, aber einfach die action im formular leer zu lassen hat leider nichts gebracht.

      gruß,
      wahsaga

      1. hi,

        Ich sehe dich nirgendwo die Default-Reaktion auf Drücken der Returntaste in einem Eingabefeld - nämlich das "normale" Abschicken des Formulars - unterbinden.

        Da such ich schon die ganze Zeit wie ich das machen kann, aber einfach die action im formular leer zu lassen hat leider nichts gebracht.

        Bspw. darüber, aus der Eventbehandlung heraus false zurückzugeben.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Heyho Beach!

          Wahsaga meint du solltest dich mal etwas naeher mit onsubmit beschaeftigen.