Avatar billede obhat Nybegynder
25. august 2006 - 10:55 Der er 14 kommentarer og
3 løsninger

Disabled formularfelt

Kan man med 2 radiobuttom disable 2 formularfelter.
Klik på et radiobuttom disabler det ene felt og det andet det andet.
Sådan at man kun kan skrive i et felt??
Avatar billede jensgram Nybegynder
25. august 2006 - 11:09 #1
Det kan det da - du får lige et udsnit fra noget, hvor samme funktionalitet er laveT:

<form action="skriv.php?brev_id=0" method="post">
    <table border="0" width="100%">
        <tr>
            <td>Emne:</td>
            <td colspan="2"><input type="text" name="emne" value="" style="width: 100%;" maxlength="64" /></td>
        </tr>
        <tr>
            <td>Tekst:</td>

            <td colspan="2"><textarea name="tekst" rows="20" cols="75" style="width: 100%;"></textarea></td>
        </tr>
        <tr>
            <td width="20%" rowspan="2">Modtager(e):</td>
            <td width="40%"><input type="radio" name="modtagere" value="gruppe" checked="checked" id="frm_modtagere_gruppe" onclick="enable_field('frm_modtagere_gruppe_data');" /><label for="frm_modtagere_gruppe" title="Send til en gruppe. Hver gruppe p&aring; listen inkluderer automatisk grupperne derunder (ex: &quot;For&aelig;ldre&quot; tilh&oslash;rer &quot;Familie&quot;, som igen tilh&oslash;rer &quot;Alle&quot; osv."> Gruppe </label>(<a href="grupper.php">redig&eacute;r</a>)</td>

            <td width="40%"><select name="modtagere_gruppe_data" id="frm_modtagere_gruppe_data" style="width: 100%;"><option value="0" selected="selected">Alle</option><option value="1">Familie</option><option value="2">For&aelig;ldre</option><option value="3">Os</option></select></td>
        </tr>
        <tr>
            <td><input type="radio" name="modtagere" value="adresse" id="frm_modtagere_adresse" onclick="enable_field('frm_modtagere_adresse_data');" /><label for="frm_modtagere_adresse" title="Send til &eacute;n eller flere adresser. Adskil adresserne med komma!"> Adresse(r) </label>(<a href="java script:advanced_to();">avanceret</a>)</td>

            <td><input type="text" name="modtagere_adresse_data" value="" disabled="disabled" id="frm_modtagere_adresse_data" style="width: 100%;" /></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" name="submit_gem" value="Gem!" style="width: 100%;" /></td>
            <td><input type="submit" name="submit_send" value="Send!" style="width: 100%;" /></td>
        </tr>
    </table>
</form>


Scriptet:

// enable_fields()
var $fields = new Array(); // Array containing field-id's

function enable_field($field)
{
    /* To be edited! */
    $fields[0] = 'frm_modtagere_gruppe_data'; // Field-id's
    $fields[1] = 'frm_modtagere_adresse_data';

    /* NOT to be edited! */
    for ($i = 0; $i < $fields.length; $i++) { // Iterate through fields
        document.getElementById($fields[$i]).disabled = ($fields[$i] == $field ? false : true); // Disable fields, but enable $field
    }
    document.getElementById($field).focus(); // Give the enabled field focus

}
Avatar billede softspot Forsker
25. august 2006 - 11:13 #2
En variant (tror jeg nok :)):

<html>
<head>
<script type="text/javascript">
function setState(obj,state) {
  if(obj) {
    var frm = obj.form;
    switch(state) {
      case 1:
        frm.txt1.disabled=false;
        frm.txt2.disabled=true;
        frm.txt1.focus();
        frm.txt1.select();
        break;
      case 2:
        frm.txt1.disabled=true;
        frm.txt2.disabled=false;
        frm.txt2.focus();
        frm.txt2.select();
        break;
    }
  }
}
</script>
</head>
<body>
  <form>
    <input type="radio" name="rad" onclick="setState(this,1)">
    <input type="text" name="txt1" disabled="true" /><br>
    <input type="radio" name="rad" onclick="setState(this,2)">
    <input type="text" name="txt2" disabled="true" /><br>
  </form>
</body>
</html>
Avatar billede mclemens Nybegynder
25. august 2006 - 12:44 #3
... (((måske en lille forkortelse))) ...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
function setState(obj,state) {
  var frm = obj.form;
  frm.txt1.disabled=(state!=1);
  frm.txt2.disabled=(state!=2);
  frm["txt"+state].focus();
}
</script></head>

<body>
  <form>
    <input type="radio" name="rad" onclick="setState(this,1)">
    <input type="text" name="txt1" disabled="disabled" /><br>
    <input type="radio" name="rad" onclick="setState(this,2)">
    <input type="text" name="txt2" disabled="disabled" /><br>
  </form>
</body></html>
Avatar billede mclemens Nybegynder
25. august 2006 - 13:17 #4
script sectionen kan selvfølgelig godt forkortes mere
... men det bliver mindre gennemskueligt ...
<script type="text/javascript">
function setState(o,s) {
  f=o.form;
  for(i=1;tn=f["txt"+i];i++)tn.disabled=(s!=i);
  f["txt"+s].focus();
}
</script>
Avatar billede mclemens Nybegynder
25. august 2006 - 13:19 #5
... det forudsætter også at du kun bruger name="txt efterfulgt af tal til de radioer der skal disables /enables - og at de er forløbende nummerede ... m.h.t. hvis de hedder rad og et tal er det bare denne txt i denne linje der skal rettes:
  for(i=1;tn=f["txt"+i];i++)tn.disabled=(s!=i);
Avatar billede softspot Forsker
25. august 2006 - 13:19 #6
...og det forudsætter så at man ikke vil have mere sigende navne på sine kontroller (hvilket jeg da vil anbefale man har :)).

Alternativet er at lave en tilstandsmatrix, som man itererer og sætter kontrollernes tilstand efter, alt efter hvilken state man har valgt formularen skal sættes i...
Avatar billede softspot Forsker
25. august 2006 - 13:20 #7
OK, jeg kan se vi er enige, mclemens og jeg :D
Avatar billede obhat Nybegynder
25. august 2006 - 15:05 #8
Fint. det er noget i den stil :)
Avatar billede mclemens Nybegynder
25. august 2006 - 16:40 #9
... Betyder det en deler ?
eller point til softspot ?
eller point til jensgram ?
Avatar billede obhat Nybegynder
26. august 2006 - 19:47 #10
en deler ikk
Avatar billede mclemens Nybegynder
26. august 2006 - 20:32 #11
Ok, her er et af dem :)
Avatar billede softspot Forsker
26. august 2006 - 22:50 #12
Jo, det er helt fint :)
Avatar billede jensgram Nybegynder
26. august 2006 - 22:54 #13
?
Avatar billede obhat Nybegynder
27. august 2006 - 13:36 #14
Points :^)
Avatar billede softspot Forsker
27. august 2006 - 14:07 #15
Tak for point :)
Avatar billede mclemens Nybegynder
27. august 2006 - 14:59 #16
Tak for point (:
Avatar billede jensgram Nybegynder
27. august 2006 - 15:23 #17
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester