Avatar billede phliplip Nybegynder
30. marts 2004 - 00:59 Der er 7 kommentarer og
1 løsning

Disable/Enable alle elementer i et layer eller celle

Hej Dudes !

Har lige lavet et lille ekspempel til forståelsen af dette spm. !

http://dj-bornholm.dk/philip/index.htm

Det jeg søger er at javascript der kan disable alle elementerne ud for de radiobuttons der er, PÅNÆR de elementer der er ud for den checkede radio button ! Og når man checker en anden skal de elementer der er ud for den man lige har klikket på enables og de andre skal disables...

Er der en nem måde at gøre det på ? Eller skal jeg lave et J-Script der gør det for hvert element ?

Håber i kan hjælpe mig ;)
Avatar billede roenving Novice
30. marts 2004 - 01:21 #1
Hvis du kan fastholde det navngivnings- og value-skema der er lige nu, er det ikke så svært:

<html>

<head>
<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Dokument</title>
<script type="text/javascript">
function disEnAble(elm){
  f = elm.form;
  id = elm.value.substring(1);
  for(i=0;f.elements.length>i;i++){
    f.elements[i].disabled = (f.elements[i].type!='radio'&&f.elements[i].name.substring(1)!=id);
  }
}
</script>
</head>

<body>

<form method="POST" action="--WEBBOT-SELF--">
    <!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
    <table border="1" width="100%" id="table1">
        <tr style="display: all">

            <td valign="top"><input type="radio" value="V1" name="R1" onclick="disEnAble(this)"></td>
            <td width="100%">Dokument:<br>
            <select size="1" name="D1"></select></td>
        </tr>
        <tr>
            <td valign="top"><input type="radio" value="V2" name="R1" onclick="disEnAble(this)"></td>
            <td width="100%">Modul:<br>
            <select size="1" name="D2"></select></td>

        </tr>
        <tr>
            <td valign="top"><input type="radio" value="V3" name="R1" onclick="disEnAble(this)"></td>
            <td width="100%">Billede:<br>
            <select size="1" name="D3"></select></td>
        </tr>
        <tr>
            <td valign="top"><input type="radio" value="V5" name="R1" onclick="disEnAble(this)"></td>

            <td width="100%">Fil:<br>
            <select size="1" name="D5"></select></td>
        </tr>
        <tr>
            <td valign="top" height="28">
            <input type="radio" value="V6" checked name="R1" onclick="disEnAble(this)"></td>
            <td width="100%" height="28">Hjemmeside :
            <input type="text" name="T6" size="20"></td>
        </tr>

        <tr>
            <td valign="top"><input type="radio" value="V4" name="R1" onclick="disEnAble(this)"></td>
            <td width="100%">Email : <input type="text" name="T4" size="20"></td>
        </tr>
    </table>
</form>

</body>

</html>
Avatar billede langthjem Nybegynder
30. marts 2004 - 01:59 #2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0038)http://dj-bornholm.dk/philip/index.htm -->
<HTML><HEAD><TITLE>Dokument</TITLE>
<META http-equiv=Content-Language content=da>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<FORM action=--WEBBOT-SELF-- method=post><!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
<TABLE id=table1 width="100%" border=1>
  <TBODY>
  <TR>
    <TD vAlign=top><INPUT type=radio value=V1 name=R1 onClick="OnlyOne('grp1')"></TD>
    <TD width="100%" id="grp1">Dokument:<BR><SELECT size=1 name=D1></SELECT></TD></TR>
  <TR>
    <TD vAlign=top><INPUT type=radio value=V2 name=R1 onClick="OnlyOne('grp2')"></TD>
    <TD width="100%" id="grp2">Modul:<BR><SELECT size=1 name=D2></SELECT></TD></TR>
  <TR>
    <TD vAlign=top><INPUT type=radio value=V3 name=R1 onClick="OnlyOne('grp3')"></TD>
    <TD width="100%" id="grp3">Billede:<BR><SELECT size=1 name=D3></SELECT></TD></TR>
  <TR>
    <TD vAlign=top><INPUT type=radio value=V5 name=R1 onClick="OnlyOne('grp4')"></TD>
    <TD width="100%" id="grp4">Fil:<BR><SELECT size=1 name=D5></SELECT></TD></TR>
  <TR>
    <TD vAlign=top height=28><INPUT type=radio CHECKED value=V6 name=R1 onClick="OnlyOne('grp5')"></TD>
    <TD width="100%" height=28 id="grp5">Hjemmeside : <INPUT name=T1><br>Hjemmeside : <INPUT name=T1></TD></TR>
  <TR>
    <TD vAlign=top><INPUT type=radio value=V4 name=R1 onClick="OnlyOne('grp6')"></TD>
    <TD width="100%" id="grp6">Email : <INPUT
name=T2></TD></TR></TBODY></TABLE>
</FORM>
<script language="JavaScript">
//Antallet af grupper
iGroups = 6;

function OnlyOne(sActive) {
    for (i=1;i<=iGroups;i++) {
        objName = 'grp' + i;
        myArr = document.getElementById(objName).children;
        for (ii=0;ii<myArr.length;ii++) {
            if (sActive == objName) {
                myArr[ii].disabled = false;
            } else {
                myArr[ii].disabled = true;
            }
        }
    }
}

//Element som er aktivt default
OnlyOne('grp5');
</script>
</BODY>
</HTML>
Avatar billede phliplip Nybegynder
30. marts 2004 - 02:02 #3
Jeg har brugt Dennis' da det er det jeg syntes var smartest, da det ikke begrænser mine name tags, og derved variabel navnene i PHP :D

@roenving: No hard feelings.. ellers må du lige få nogen point også ;)
Avatar billede roenving Novice
30. marts 2004 - 02:07 #4
Nu havde du jo adskilligt mere end en ½ time til at spørge, om der var andre måder at gøre det på, for jeg benyttede mig jo bare af, at jeg kunne skrive en kode på 4 linjer, da dit navngivningsskema lagde op til det ...

-- og det kan da forøvrigt ikke undgå at undre, at svaret er lagt 1:59, godkendt allersenest 2:00 og forklaret 2:02 ?-)
Avatar billede phliplip Nybegynder
30. marts 2004 - 02:47 #5
;) Kan jo ikke være så lang tid om så lidt - He

Ej.. For at være ærlig så havde jeg kontakt med Dennis på MSN og han kom men en løsning der bare var i vinkel..

Din virkede også.. bare ikke så optimalt som man kunne ønske, og jeg havde selvfølgelig spurgt dig om der var en bedre løsning.. hvis det ikke lige var fordi Dennis kogede på en ;)

Men som sagt.. hvis det er nødvendigt så smider jeg gerne nogen point til dig !
Avatar billede roenving Novice
30. marts 2004 - 02:52 #6
Nu _kan_ du jo ikke smide nogen points, da du jo allerede har brugt de maksimale 200 !-)

-- og jeg forøvrigt næppe står og mangler ...

-- og det værste jeg kan sige om den, du så bruger er, at den ikke virker i ret mange browsere, da .children er IE-specifik !-)
Avatar billede roenving Novice
30. marts 2004 - 02:56 #7
-- og jeg ville iøvrigt have valgt en løsning, som tog udgangspunkt i rækken, så den var generisk og ikke afhængig af, at du fik lagt id'er ind alle steder, hvis ikke der havde været det smuthul med value/name !-)
Avatar billede phliplip Nybegynder
30. marts 2004 - 09:19 #8
Så kunne jeg vel altid ha' oprettet et nyt spm ;)

Nu skal det bruges til et admin modul, og der er det i forvejen IE optimeret !

Jeg overvejede også om man kunne ikke lave følgende;

variablen action sættes til enable
gennemløb hele elements[]
  hvis elements[x] er lig elm (den valgte radiobutton)
    variablen action sættes til enable
  ellers så hvis element[x] er af typen radio
    variablen action sættes til disable
  ellers
    sæt element[x] til indholdet af variablen action

Jeg bare ikke så skrap til JScript ;)
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