Hauptmenü

Untermenü

DOM-Manipulation JavaScript - Praxistutorial 2 - Daten zusammenstellen

1. Die Abschnitte

2. Die select-Felder auswerten

Zuerst wollen wir uns mal die ausgewählten Werte holen. Und da das ja nur bei der POST-Variante so sein soll, legen wir vorab eine entsprechende Bedingung fest. Ach ja, das Array input haben wir ja schon bei der Erzeugung des Objektes von ajaxTut mit den entsprechenden Feldnamen gefüllt. Also diese komische "Konstruktorfunktion". Somit können wir auch auf alle select-Felder zugreifen.


this.prepareRequest = function(artid)
{
  ...
  try
  {
    ...
    if ('post' == art)
    {
      for (i in input)
      {
        if (!= form[input[i]].value)
        {
          str += '&' input[i] + '=' form[input[i]].value;                  
        }
      }      
    }
  }
  ...
}

Erläuterung

Mit if (0 != form[input[i]].value) überprüfen wir, ob in dem jeweiligen select-Feld nicht der Standardeintrag ausgewählt worden ist. Der Rest ist eine stinknormale Zeichenkettenverknüpfung, in der wir GET-Parameter festlegen.

Warum GET?

Auch wenn wir die Daten später per POST übertragen wollen, so müssen sie, wie oben geschehen, aufgebaut sein. Ist halt so vorgegeben, sonst werden die Daten nicht versendet.

3. option-Werte merken

Da wir später die select-Felder komplett leeren und dann neu aufbauen, müssen wir uns die ausgewählten Werte merken, um sie dann mit selected festlegen zu können. Und dafür haben wir zu Beginn ja das Array select angelegt.


...
for (i in input)
{
  ...
  if (form[input[i]].selectedIndex 0)
  {
    var index        form[input[i]].selectedIndex;
    select[input[i]] = form[input[i]].options[index].value;
  }
  else
  {
    select[input[i]] = '0';
  }      
}

Erläuterung

In JavaScript werden bei select-Feldern alle option-Elemente intern als Array angelegt und das völlig unabhängig vom jeweils vorgegebenen value-Wert. selectedIndex ist also der numerische Index des ausgewählten option-Eintrags. Und dessen value-Wert(!) schreiben wir in das "assoziative" Array select.

4. Felder deaktivieren

Ein Ajax-Request kann je nach Komplexität schon mal ein wenig dauern. Und wenn dann die Leute ihre Gichtgriffel nicht im Zaum halten und weiter wie die Blöden in den Formularelementen herumklicken, so kann das schon mal eine ziemliche Sauerei geben, oder genauer gesagt, es knallt irgendwo in der Logik. Um so was zu unterbinden, sollte man die entsprechenden Elemente für die Dauer der Anfrage auf disabled setzen. Und das geschieht in diesem Fall so.


for (i in input)
{
  ...
  form[input[i]].setAttribute ('disabled''disabled');
}  
sendPostRequest();

Erläuterung

Man könnte anstelle von setAttribute ('disabled', 'disabled'); auch setAttribute ('disabled', true); schreiben und es funktioniert trotzdem. Warum ich es nicht mache? Nun ich nehme seit Jahren als DOCTYPE-Definition XHTML 1.0 Transitional. Und da lautet die korrekte HTML-Version nun mal <select name="blubb" disabled="disabled">. Das ist der einzige Grund.

Mit sendPostRequest(); rufen wir anschließend die gleichnamige Methode unseres Objektes ajaxTut auf, die dann die Daten verschickt. Und dazu komme ich jetzt.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt