Hanse: Form/checkbox Wert aus array lesen.....

Hallo Forummitglieder
alle Eingaben meiner Formelemente werden in einem array gespeichert.
Es gibt eine Checkbox, die allerdings im Gegensatz zu allen anderen Formelementen, nur einmal angeklickt werden darf. (im array dürfen alle formelemente x-beliebig gespeichert werden. Diese Checkbox=true aber nur einmal
Wenn nun ein Anwender auf der Oberfläche ein zweites Mal diese checkbox aktivieren möchte, soll eine Fehlermeldung ausgegeben werden, dass im array schon ein checkbox=true vorhanden ist.
Wie greife ich von der Oberfläche in dieses Array für diese Abfrage??
Hier etwas code
Es wäre ganz toll wenn mir jemand helfen könnte da ich noch nicht so geübt bin und aus einem Beispiel am besten lerne
vielen dank
hanse

//die checkbox:
<input type="checkbox" name="important">

//hier wird der die checkbox in das array gelesen:
function array() {
    get[mes] = new Array ()
    get[mes][3] = document.mondo.statikspot.checked
    .......

  1. Hallo Hanse,
    wenn ich dich richtig verstanden sollte, ist der unten angebene Code genau das richtige für dich ;)
    Habe es eben selber geschrieben, du solltest allerdings auf das evtl. reloaden der Seite achten, da es dann leicht zu problemen kommen kann. du musst dann darauf achten das die variable zurück gesetzt ist und das die HTMLelemente ebenfalls zurückgesetzt sind.
    Schau dir das beispiel an, naja kannst ja selber dann noch drann rumpfeilen. Meine lösung ist bestimmt keine ideallösung, allerdings ist sie zumindest eine ;).

    gruß Urmel
    ********************************
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">

    <script language="Javascript">
    <!--

    var elemente = new Array();

    function check(){

    if(!elemente[0]){

    for(var i=0; i<document.hans.wurst.length; i++){
       if (document.hans.wurst[i].checked){
        elemente[0] = i;
       }
      }
     }
     else{
      if(document.hans.wurst[elemente[0]].checked == true){
       for(var i=0; i<document.hans.wurst.length; i++){
        if (elemente[0] != i){
         document.hans.wurst[i].checked = false;
        }
       }

    confirm("Sie hatten sich bereits fuer die "+(elemente[0]+1)+". Option entschienden!");
      }
      else{
       document.hans.wurst[elemente[0]].checked = true;
       confirm("Sie koennen den aktuellen Wert nicht mehr aendern!");
      }
     }
    }

    //->
    </script>

    </HEAD>

    <BODY>
    <form name="hans">

    <input type="checkbox" name="wurst" value="salami" onClick="javascript:check()">Salami<br>
    <input type="checkbox" name="wurst" value="pilze" onClick="javascript:check()">Pilze<br>
    <input type="checkbox" name="wurst" value="sardellen" onClick="javascript:check()">Sardellen

    </form>
    </BODY>
    </HTML>

    1. Hallo,

      ich verstehe den Sinn der Lösung nicht: Wenn man es realisieren will, dass immer nur eine Option angewählt ist, nimmt man Radiobuttons. Ferner ist es absolut benutzerunfreundlich, zu verbieten, eine Auswahl korrigieren zu können. Insofern ist mir unklar, welchen Nutzen das Spielchen haben soll.

      Es gibt eine Checkbox, die allerdings im Gegensatz zu allen anderen Formelementen, nur einmal angeklickt werden darf.

      Wieso?! Was, wenn der Benutzer sich umentscheiden möchte?

      Wenn nun ein Anwender auf der Oberfläche ein zweites Mal diese checkbox aktivieren möchte, soll eine Fehlermeldung ausgegeben werden, dass im array schon ein checkbox=true vorhanden ist.

      Wenn ein Benutzer die Checkbox ein weiteres Mal anklickt (*de*aktivieren möchte, meinst du wohl), müsstest du in deinem Array die Checkbox logischerweise ebenfalls auf false stellen, damit du am Ende, wenn du etwas mit dem Array anstellst (darauf läuft es anscheinend hinaus), den richtigen Wert gespeichert hast.

      Wie greife ich von der Oberfläche in dieses Array für diese Abfrage??

      Von welcher Oberfläche? Willst du wissen, wie du ein bestimmtes Element in einem Formular ansprichst oder suchst du http://selfhtml.teamone.de/javascript/objekte/elements.htm, speziell http://selfhtml.teamone.de/javascript/objekte/elements.htm#checked? In deinem Beispielcode hattest du doch eine solche Abfrage mehr oder weniger gezeigt.

      Falls du beim Klick auf eine Checkbox den jeweiligen Wert in einen Array schreiben willst:

      <form name="formular">
      <p><input type="checkbox" name="box" onclick="meinarray['checkbox']=this.checked"></p>
      </form>

      Falls du partout verhindern willst, dass die Auswahl geändert wird, fragst du ab, ob vorher bereits ein solches Arrayelement existiert bzw. ob es einen anderen Wert als den Ausgangswert hat. Da typeof(meinarray['checkbox'])==undefined anscheinend nicht klappt, sollte das Arrayelement vielleicht mit »leer« o.ä. besetzt werden: var meinarray=Array(); meinarray['checkbox']='leer'; Der Code dazu sähe folgendermaßen aus:

      <form name="formular">
      <p><input type="checkbox" name="box" onclick="if (meinarray['checkbox']=='leer') {meinarray['checkbox']=this.checked;} else {this.checked=true; window.alert('Sie können die Auswahl nicht mehr ändern!');}"></p>
      </form>

      Der JavaScript-Code ließe sich natürlich in eine Funktion auslagern.

      Urmels Code lässt sich auch verbessern (d.h. damit er das tut, was er soll, unabhängig davon, ob es sinnvoll ist):

      <script type="text/javascript">
      var elemente = new Array();
      elemente[0]='leer';

      function check (triggobj){

      if (elemente[0]=='leer') {
        for (var i=0; i<document.hans.wurst.length; i++) {
         if (document.hans.wurst[i].checked) {
          elemente[0] = i;
         }
        }
       } else {
        if (document.hans.wurst[elemente[0]].checked) {
         triggobj.checked = false;
         window.alert("Sie hatten sich bereits fuer die "+(elemente[0]+1)+". Option entschienden!");
        } else {
         document.hans.wurst[elemente[0]].checked = true;
         window.alert("Sie koennen den aktuellen Wert nicht mehr aendern!");
        }
       }
      }
      </script>

      ...mit...

      <form name="hans">
      <input type="checkbox" name="wurst" value="salami" onclick="check(this)">Salami<br>
      <input type="checkbox" name="wurst" value="pilze" onclick="check(this)">Pilze<br>
      <input type="checkbox" name="wurst" value="sardellen" onclick="check(this)">Sardellen
      </form>

      Grüße,
      Mathias

      --
      »In anderen Newsgroups werden Pseudonyme akzeptiert, es handelt sich dabei meist um Gruppen, in denen sensible Themen (z.B. psychische oder peinliche Erkrankungen o.ä.) behandelt werden.«
      1. Hallo,
        vielleicht hätte ich ein bischen mehr erklären sollen:
        Also in das array werden Nachrichten geschrieben. Eine Nachricht besteht aus einer Textzeile(Textfield) und 5 Attribute(List/Menus) wie Textfarbe, Textposition, Textstyle....(deshalb ist es 2-dimensional).Nachdem man diese Werte ausgewählt hat, fügt man sie über einen Button add in dieses array, und die Forminhalte werden auf 0 zurückgesetzt (auch diese checkbox. Nun kann man erneut eine Nachricht verfassen.....

        Von all diesen Nachrichten die man erstellen kann, darf aber nur eine diesen Wert "important=true" aus der Checkbox haben.
        Falls einer Nachricht "important=true" ein zweitesmal zugewiesen wird, soll diese Fehlermeldung erschéinen.

        How to do this??

        hanse

        1. Hallo Hanse,

          Von all diesen Nachrichten die man erstellen kann, darf aber nur eine diesen Wert "important=true" aus der Checkbox haben.
          Falls einer Nachricht "important=true" ein zweitesmal zugewiesen wird, soll diese Fehlermeldung erschéinen.

          Setze eine Variable, wenn beim Speichern einer Nachricht (Überführen in den Array) die important-Checkbox ausgewählt wurde. Beim Klick auf die Checkbox fragst du ab, ob diese Variable bereits gesetzt wurde. Falls ja, setzt du checked auf false und gibst eine Fehlermeldung aus, da bereits eine Nachricht mit important im Array vorhanden sein dürfte.
          Das System habe ich bereits grundlegend beschrieben, nur die Variable liegt dann eben außerhalb des Arrays und die Abfrage in der speichernden Funktion.

          Grüße,
          Mathias

          --
          »In anderen Newsgroups werden Pseudonyme akzeptiert, es handelt sich dabei meist um Gruppen, in denen sensible Themen (z.B. psychische oder peinliche Erkrankungen o.ä.) behandelt werden.«