[JavaScript] Bei onsubmit bestimmten Wert übergeben

Dieses Thema im Forum "Webentwicklung" wurde erstellt von ibot, 4. Juni 2009 .

  1. 4. Juni 2009
    Bei onsubmit bestimmten Wert übergeben

    Hall zusammen,

    sorry das ich mal wieder Hilfe brauch, aber ich komm nicht weiter.

    Ich habe ein form bei dem ein onsubmit() Ereignis ausgelöst wird sobald auf den Button innerhalb eines divs geklickt wird.

    Ich habe hier mal ausschnittsweise den code. Dazu muss ich sagen das es nicht nur dieses eine div sonder noch ca. 10 weitere gibt. Eines dieser divs ist immer auf style.display=="block" gesetzt (also sichtbar) alle anderen auf style.display=="none" (unsichtbar)

    Folgendes ist wichtig. Sobald auf den Button geklickt wird und das
    onsubmit="return check()"
    ausgelöst wird soll dem funktionsnamen gleichzeitig auch der name bzw. die id des div elements übergeben werden, das derzeitig sichtbar ist (also welches auf style.display=="block" gesetzt ist)

    z.B. onsubmit="return check(div id des elements mit style.display=="block")

    Wie kann ich das realisieren?

    HTML:
    <form name="Formular" method="POST" action="decide.php" onsubmit="return check()">
     <select name="cb" size="6">
     <option value="regisseur">Regisseur</option>
     <option value="film">Film</option>
     <option value="person">Person</option>
     <option value="prodfirma">Produktionsfirma</option>
     <option value="regal">Regal</option>
     <option value="dvd_exemplar">DVD Exemplar</option>
     </select>
     
     <h4><a href="#" onclick="toggle('add')">Einfügen</a></h4>
     <h4><a href="#" onclick="toggle('delete')">Löschen</a></h4>
     <h4><a href="#" onclick="">Ändern</a></h4>
     
     <div id="add_prodfirma" style="display:block">
     <table id="klapp" align="center" border="0">
     <tr><td>Firmenname:</td>
     <td><input type="text" name="firmenname" size="30" maxlength="40"/></td></tr>
     <tr></tr>
     <tr><td></td>
     <td><input type ="submit" value="Übernehmen" name="add_prodfirma"></td></tr>
     </table>
     </div>
    </form>
    
     
  2. 4. Juni 2009
    AW: Bei onsubmit bestimmten Wert übergeben

    Code:
    var divs = form.getElementsByTagName('div'); // "form" sollte klar sein
    var div_block = null;
    for(var i = 0, to = divs.length; i < to; i++) {
     if(divs[i].style.display == 'block') {
     div_block = divs[i];
     break;
     }
    }
    
    if(div_block == null)
     alert('kein div sichtbar');
    else {
     // code
    }
    und wehe du schreibst den code da als argument rein.
     
  3. 4. Juni 2009
    AW: Bei onsubmit bestimmten Wert übergeben

    Das is schonmal super besten dank. (Ich habs auch nicht als Argument verwendet^^)
    Nur eins. Wie geschrieben brauch ich den Namen des divs.
    Bisher gibt er allerdings nur: [object HTMLDivDlement]

    Wo kann ich nun den Namen herbekommen?
     
  4. 5. Juni 2009
    AW: Bei onsubmit bestimmten Wert übergeben

    du meinst die ID?
    die kannst du einfach via div_block.id auslesen

    wenn du anschließend aber document.getElementById verwendest gibts eins auf die finger
     
  5. 5. Juni 2009
    AW: Bei onsubmit bestimmten Wert übergeben

    warum machste nich einfach bei
    Code:
     <h4><a href="#" onclick="toggle('add')">Einfügen</a></h4>
     <h4><a href="#" onclick="toggle('delete')">Löschen</a></h4>
     <h4><a href="#" onclick="">Ändern</a></h4>
    
    der toggle funktion, dass dabei die ID übergeben wird?
    toggle('add_prodfirma');

    toggle setzt dann ne variable auf add_prodfirma und zeigt den block an - fertig?
     
  6. 5. Juni 2009
    AW: Bei onsubmit bestimmten Wert übergeben

    @Murdoc

    SPITZE! Nun gehts voran^^ Danke nochmal.

    @Telefonzelle
    Bin mir nicht sicher ob ich dich richtig verstanden habe.
    Das Problem bei dem ganzen ist, dass ich zahlreiche divs habe (nicht nur add_prodfirma) und ich erstmal herausfinden muss welches dieser ganzen divs überhaupt sichtbar ist.
    Und diese id des divs muss ich dann an die check() Funktion übergeben. Das hat bei mir nix mit der toggle() Funktion zu tun.
    Wenn ich jetzt drüber nachdenke hätte man vll. gleiche eine Variable setzen können wenn toggle() ein div auf block setzt. Vielleicht meintest du das sogar?
    Da stellt sich mir aber wieder die Frage ob man Funktionsübergreifend auf andere Variablen zugreifen kann? Also ob die check() Funktion dann auf die in toggle() definierte Variable zugreifen könnte.

    Naja wie auch immer^^
    Jetzt gehts erstmal.

    Besten dank nochmal
     
  7. 5. Juni 2009
    AW: Bei onsubmit bestimmten Wert übergeben

    wenn die variable global is kein problem

    Code:
    var block_div_id;
    function toggle(id) {
     block_div_id = id;
     // code
    }
    
    function check() {
     alert(block_div_id); // gesetzt von toggle()
    }
    wir reden aber von javascript
    Code:
    function toggle(id) {
     toggle.id = id;
     // code
    }
    
    function check() {
     alert(toggle.id); // funktionen sind variablen sind objekte
    }
    wie geht das denn?
    funktionen haben ne sonderbehandlung in javascript, aber dennoch sind alle funktionen objekte. (siehe Function prototype)

    der interpreter erstellt zwar nen call-stack, wertet aber variablen darin erst bei einem aufruf aus, weil dann erst der scope erstellt wird. (deswegen sind bei der definition nicht vorhandene aber beim aufruf gesetzte globale bzw. übergeordnete variablen in der funktion vorhanden)

    in diesem beispiel wird also ganz einfach auf das funktions-objekt zurückgegriffen, welches die selben getter und setter hat wie jedes andere objekt in javascript.

    aber warum ist toggle in der gleichnamigen funktion vorhanden?
    -> ganz einfach: toggle wird in unserem fall im globalen scope definiert. wenn man diese funktion jetzt aufruft erbt die funktion alle variablen und funktionen eben von diesem scope.

    aber warum "toggle" und nicht "this" ?
    -> weil "this" in verwendung mit funktionen (nicht klassen) nach dem aufruf gelöscht werden würde, da kein context mehr existiert der variablen darin weiter im speicher halten würde.

    aber wenn "this" vom scope darüber erbt, dann müsste doch auch "this.toggle" vorhanden sein?
    -> das is vollkommen richtig, genauso wie "this.window" vorhanden ist. this.toggle.id = 123; würde deshalb auch funktionieren.

    weiterhin viel spaß mit javascript =)
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.