Dieter Raber: confirm abhängig von select-Auswahl

Beitrag lesen

Hallo Daniel,

Erstmal die formalen Sachen

  • Wenn Du xhtml oder auch einfach nur gutes HTML anstrebst, sollten dein options die Form <option value="1234">a</option> haben, also klein geschrieben und geschlossen. Es waere auch nett, die options wegen der Uebersicht etwas einzuruecken. Das bezieht sich im Prinzip auf alle Elemente.
  • JavaScript mag auch eingerückt werden
  • Deine Benamungen sollten aussagekräftiger sein.
    Die Formalien haben den Sinn, dass das Script uebersichtlicher wird und vor allem , dass sich Dritte, so wie ich, oder aber du selbst Du in 6 Wochen, darin zurechtzufinden.

Zum Javascript

  • Du musst, wenn Du PHP schreibst, error_reporting auf 2047 (E_ALL) haben. Bei Javascript musst Du ebenfalls einen Debugger haben. Eine gute Kombination ist die Javascript-Konsole von Mozilla oder Firebird zusammen mit der Web Developer Extension von Chris Pederick. Haettest Du einen Debugger, waere dir aufgefallen, dass Javascript das Array JS_Array nicht kennt. Der Grund ist, dass JavaScript zwischen Groß- und Kleinschreibung unterscheidet , es muss also new Array() heissen, nicht new array().
  • Dein ursprüngliches Anliegen war, wenn ich Dich richtig verstanden habe:
      - wenn die Option keiner Ueberpruefung bedarf, soll die Form einfach abgeschickt werden
      - wenn eine Ueberpruefung notwendig ist, soll die Form nur bei Zustimmung abgeschickt werden
  • Demnach muss die Funktion onsubmit (der Form) ausgefuehrt werden, nicht onclick (des Buttons). Siehe Kommentare in der Funktion fuer weiteres

Im Ergebnis sieht das so aus:

<form name="addVeraForm" action="foo.php" onsubmit="return Ueberpruefen(this.oidv.options[this.oidv.options.selectedIndex].value)">
<select name="oidv">
  <option value="1029">a</option>
  <option value="1468">d</option>
</select>
<script type="text/javascript">
  JS_Array = new Array();
  JS_Array[1029] = 0;
  JS_Array[1468] = 1;

function Ueberpruefen(v_oid)
  {
    if(JS_Array[v_oid] == 1) //confirm() ausgeben oder nicht
    {
      ok = confirm("Dieser Veranstaltungsort besitzt bereits ein Objekt. Überschreiben?");
      if(ok) // ok geklickt oder cancel?
      {
        return true;// wenn ok, dann abschicken
      }
      else return false; // wenn cancel, nicht abschicken
    }
    else return true;// Kein confirm(), also abschicken
  }
</script>
...
<input type="submit" name="addVera">

Gruß,

Dieter