Avatar billede jesper-moeller Nybegynder
23. september 2006 - 16:54 Der er 30 kommentarer og
1 løsning

udregning i form

Jeg har en lille form der skal vise resultatet af 3x3 checkbox felter i 3 felter
checkbox 1a, 2a og 3a ... 1b, 2b, og 3b ... 1c, 2c, og 3c
efterhånden som checkboxene afkrydses skal resultatet visses i 3 resultatfelter t_a, t_b og t_b

Mit problem er at få den til at "skrive" og "læse" i resultatfeltet når boxene checkes af
nogen der kan hjælpe ???

------Mit scrit forsøg

function minfunktion(felt, nummer){
var cname = felt
var cnumb = nummer
t_felt = "t_" + felt
var a= (document.minform.t_felt.value)
var b= a+nummer
document.minform.t_user.value = b


------ delen af formen det skal virke på

<td bgcolor="#dcdcdc"><input type="checkbox" name="owner" value="" onclick=" minfunktion('owner', 4)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner" value="" onclick=" minfunktion('owner', 2)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner" value="" onclick=" minfunktion('owner', 1)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_owner" value="" align="center" size="2"></td>
Avatar billede mclemens Nybegynder
23. september 2006 - 22:35 #1
Sådan her?



<!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 minfunktion(t){

  f=t.form;

  for(var i=val=0;i<3;i++){
    var e=f[t.name][i];
    val+=(e.checked)?parseInt(e.value):0;
  }

  f[t.name][i].value=val;

}


</script>

</head><body>

<form>
Owner:
<input type="checkbox" name="owner" value="4" onclick=" minfunktion(this)">
<input type="checkbox" name="owner" value="2" onclick=" minfunktion(this)">
<input type="checkbox" name="owner" value="1" onclick=" minfunktion(this)">
<input type="text" name="owner" value="" align="center" size="2">

<br><br><br>
Group:
<input type="checkbox" name="group" value="4" onclick=" minfunktion(this)">
<input type="checkbox" name="group" value="2" onclick=" minfunktion(this)">
<input type="checkbox" name="group" value="1" onclick=" minfunktion(this)">
<input type="text" name="group" value="" align="center" size="2">

<br><br><br>
Public:
<input type="checkbox" name="public" value="4" onclick="minfunktion(this)">
<input type="checkbox" name="public" value="2" onclick="minfunktion(this)">
<input type="checkbox" name="public" value="1" onclick="minfunktion(this)">
<input type="text" name="public" value="" align="center" size="2">

</form>

</body></html>
Avatar billede mclemens Nybegynder
23. september 2006 - 22:38 #2
kan også skrives som:


<!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 minfunktion(t){

  f=document.minformular;

  for(var i=val=0;i<3;i++){
    var e=f[t][i];
    val+=(e.checked)?parseInt(e.value):0;
  }

  f["t_"+t][i].value=val;

}


</script>

</head><body>

<form name="minformular">
Owner:
<input type="checkbox" name="owner" value="4" onclick=" minfunktion('owner')">
<input type="checkbox" name="owner" value="2" onclick=" minfunktion('owner')">
<input type="checkbox" name="owner" value="1" onclick=" minfunktion('owner')">
<input type="text" name="t_owner" value="" align="center" size="2">

<br><br><br>
Group:
<input type="checkbox" name="group" value="4" onclick=" minfunktion('group')">
<input type="checkbox" name="group" value="2" onclick=" minfunktion('group')">
<input type="checkbox" name="group" value="1" onclick=" minfunktion('group')">
<input type="text" name="t_group" value="" align="center" size="2">

<br><br><br>
Public:
<input type="checkbox" name="public" value="4" onclick="minfunktion('public')">
<input type="checkbox" name="public" value="2" onclick="minfunktion('public')">
<input type="checkbox" name="public" value="1" onclick="minfunktion('public')">
<input type="text" name="t_public" value="" align="center" size="2">

</form>

</body></html>
Avatar billede mclemens Nybegynder
23. september 2006 - 22:44 #3
Din egen kode kunne se sådan her ud:



<!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 minfunktion(felt, nummer){

  var cname = felt
  var cnumb = nummer
  t_user = "t_" + felt
  var a= parseInt(document.minform[t_user].value);
  var b= (nummer.checked)?a+parseInt(nummer.value):a-parseInt(nummer.value);
  document.minform[t_user].value = b

}


</script>

</head><body>

<form name="minform">
Owner:
<input type="checkbox" name="owner" value="4" onclick=" minfunktion('owner',this)">
<input type="checkbox" name="owner" value="2" onclick=" minfunktion('owner',this)">
<input type="checkbox" name="owner" value="1" onclick=" minfunktion('owner',this)">
<input type="text" name="t_owner" value="0" align="center" size="2">

<br><br><br>
Group:
<input type="checkbox" name="group" value="4" onclick=" minfunktion('group',this)">
<input type="checkbox" name="group" value="2" onclick=" minfunktion('group',this)">
<input type="checkbox" name="group" value="1" onclick=" minfunktion('group',this)">
<input type="text" name="t_group" value="0" align="center" size="2">

<br><br><br>
Public:
<input type="checkbox" name="public" value="4" onclick="minfunktion('public',this)">
<input type="checkbox" name="public" value="2" onclick="minfunktion('public',this)">
<input type="checkbox" name="public" value="1" onclick="minfunktion('public',this)">
<input type="text" name="t_public" value="0" align="center" size="2">

</form>

</body></html>
Avatar billede mclemens Nybegynder
23. september 2006 - 22:56 #4
Du havde blandet variablen t_user lidt sammen og andet t_felt et andet sted
- husk at bruge [] notationen når notationen er en værdi fra en variabel...

Rettelserne:

var a= (document.minform.t_felt.value)
-> var a= parseInt(document.minform[t_user].value);
// parseInt for tal værdi og t_felt -> t_user


var b= a+nummer
-> var b= (nummer.checked)?a+parseInt(nummer.value):a-parseInt(nummer.value);
// nummer skiftet til en reference til elementet istedet for tilsendelse af værdien (af hensyn til at vi kan måsle om man checker den af eller på - og så addition eller substraktion af værdi afhængig af om checked returnerer true eller false


document.minform.t_user.value = b
-> document.minform[t_user].value = b // for at bruge variablen som er t_user.

... en lille piller i onclick's onclick=" minfunktion('owner',this)"
, og tilføjelse af value så vi kan måle på den værdi - value kan også sendes med op til scriptet hvis det er ...

og så en basis value på resultat felterne så parseInt af værdien ikke kikser ved start.

... Håber du kunne bruge eksemplerne :)


... og forklaringen på 1'eren:


function minfunktion(t){

  f=t.form; // t repræsenterede elementet der var klikket på, så
vi nupper lige en reference til formen den er i...

  for(var i=val=0;i<3;i++){ // vi løber igennem 0 - 1 - 2 ...

    var e=f[t.name][i]; // og laver en reference til element nr i med navnet opkaldet kom fra

    val+=(e.checked)?parseInt(e.value):0; // og øger værdien af val deklareret i for løkken med værdien af elementet form[navn][elementnr] afhængig af om elementet er checket eller ej
  }

  f[t.name][i].value=val; //... i har nu værdien 3 da for løkken er stoppet så vi tildeler element nr 4 med samme name resultatet af udregningen

}

... eksempel 2 er det samme bortset fra at resultat elementet har et andet navn.
Avatar billede jesper-moeller Nybegynder
23. september 2006 - 23:33 #5
Takker for dit udybende svar .. skal jeg have kigget lidt på og lige helt forstå...

*S*


Jeg har faktisk fået selve scriptet til at virke...
Men syntes det kunne gøres noget smarter hvis jeg kunne samle de 3x3 udregnings funktioner lidt sammen

Her er hvad jeg indtil nu har lavet

------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

<html>

    <head>
        <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
        <title>Chmod permission calculator</title>
    </head>

    <body>
        <script type="text/javascript">
var t_owner = 0;
var t_group = 0;
var t_other = 0;
function ChmodCalculator(user, number){
var cname = user;
var cnumb = number;
var tnumb = 0;
var tcalc = 0;
var suma = eval(document.chmodcalc.t_owner.value);
var sumb = eval(document.chmodcalc.t_group.value);
var sumc = eval(document.chmodcalc.t_other.value);
if (user=="owner4"){
    if (document.chmodcalc.owner4.checked == true){tcalc = tcalc+1;}
}
if (user=="owner2"){
    if (document.chmodcalc.owner2.checked == true){tcalc = tcalc+1;}
}
if (user=="owner1"){
    if (document.chmodcalc.owner1.checked == true){tcalc = tcalc+1;}
}
if (user=="owner4"||user=="owner2"||user=="owner1"){
    if (tcalc>0){var tnumb= suma+cnumb;}
    else{var tnumb= suma-cnumb;}
    document.chmodcalc.t_owner.value = tnumb;
}
if (user == "group4"){
    if (document.chmodcalc.group4.checked == true){tcalc = tcalc+1;}
}
if (user == "group2"){
    if (document.chmodcalc.group2.checked == true){tcalc = tcalc+1;}
}
if (user == "group1"){
    if (document.chmodcalc.group1.checked == true){tcalc = tcalc+1;}
}
if (user == "group4"||user == "group2"||user == "group1"){
    if (tcalc>0){var tnumb= sumb+cnumb;}
    else{var tnumb= sumb-cnumb;}
    document.chmodcalc.t_group.value = tnumb;
}
if (user == "other4"){
    if (document.chmodcalc.other4.checked == true){tcalc = tcalc+1;}
}
if (user == "other2"){
    if (document.chmodcalc.other2.checked == true){tcalc = tcalc+1;}
}
if (user == "other1"){
    if (document.chmodcalc.other1.checked == true){tcalc = tcalc+1;}
}
if (user == "other4"||user == "other2"||user == "other1"){
    if (tcalc>0){var tnumb= sumc+cnumb;}
    else{var tnumb= sumc-cnumb;}
    document.chmodcalc.t_other.value = tnumb;
    }
if (user == "all"){
    document.chmodcalc.t_owner.value = "";
    document.chmodcalc.t_group.value = "";
    document.chmodcalc.t_other.value = "";
}
suma = 0;
sumb = 0;
sumc = 0;
tcalc = 0;
}
</script>
        <div align="center">
            <form name="chmodcalc">
                <span class="body"><input name="h_owner" type="hidden" value=""> <input name="h_group" type="hidden" value=""> <input name="h_other" type="hidden" value=""> </span>
                <table cellpadding="5" bgcolor="black">
                    <tr>
                        <td colspan="5" align="center" bgcolor="#0099ff">
                            <h3><b>Chmod calculator</b></h3>
                        </td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Permission</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;<b>Read&nbsp;&nbsp;</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;<b>Write&nbsp;</b></td>
                        <td bgcolor="#dcdcdc"><b>Execute</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;</td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Owner</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner4" value="" onclick=" ChmodCalculator('owner4', 4)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner2" value="" onclick=" ChmodCalculator('owner2', 2)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner1" value="" onclick=" ChmodCalculator('owner1', 1)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_owner" value="0" align="center" size="2"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Group</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group4" value="" onclick=" ChmodCalculator('group4', 4)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group2" value="" onclick=" ChmodCalculator('group2', 2)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group1" value="" onclick=" ChmodCalculator('group1', 1)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_group" value="0" size="2"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Other</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other4" value="" onclick=" ChmodCalculator('other4', 4)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other2" value="" onclick=" ChmodCalculator('other2', 2)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other1" value="" onclick=" ChmodCalculator('other1', 1)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_other" value="0" size="2"></td>
                    </tr>
                    <tr align="center">
                        <td align="center" colspan="5" bgcolor="#0099ff"><input type="reset"  onclick=" ChmodCalculator('all', 0)"></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>

</html>
Avatar billede jesper-moeller Nybegynder
23. september 2006 - 23:37 #6
Hmm ... linket havde været lettere ....

http://www.jart.dk/jgom/chmod-calculator.html

Som du nok kan se virke feks

if (user=="owner4"){
    if (document.chmodcalc.owner4.checked == true){tcalc = tcalc+1;}
}
if (user=="owner2"){
    if (document.chmodcalc.owner2.checked == true){tcalc = tcalc+1;}
}
if (user=="owner1"){
    if (document.chmodcalc.owner1.checked == true){tcalc = tcalc+1;}
}

lidt som det kan gøre smartere ;-)



Nå .. men vil studere dine eksemple nøje og se om ikke jeg kan finde ud af at gøre det ;-)
Avatar billede mclemens Nybegynder
24. september 2006 - 00:04 #7
Hvad med:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

<html>

    <head>
        <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
        <title>Chmod permission calculator</title>
    </head>

    <body>
        <script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
elm.value=parseInt(elm.value)+((user.checked)?+val:-val);
}


</script>
        <div align="center">
            <form name="chmodcalc">
                <span class="body"><input name="h_owner" type="hidden" value=""> <input name="h_group" type="hidden" value=""> <input name="h_other" type="hidden" value=""> </span>
                <table cellpadding="5" bgcolor="black">
                    <tr>
                        <td colspan="5" align="center" bgcolor="#0099ff">
                            <h3><b>Chmod calculator</b></h3>
                        </td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Permission</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;<b>Read&nbsp;&nbsp;</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;<b>Write&nbsp;</b></td>
                        <td bgcolor="#dcdcdc"><b>Execute</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;</td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Owner</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner4" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner2" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner1" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_owner" value="0" align="center" size="2"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Group</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group4" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group2" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group1" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_group" value="0" size="2"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Other</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other4" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other2" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other1" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_other" value="0" size="2"></td>
                    </tr>
                    <tr align="center">
                        <td align="center" colspan="5" bgcolor="#0099ff"><input type="reset"></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>

</html>
Avatar billede mclemens Nybegynder
24. september 2006 - 00:08 #8
Et lille tip mere:
if (document.chmodcalc.other1.checked == true)
er det samme som: if (document.chmodcalc.other1.checked)
... da parenten returnerer true/falsk afhængig af om udtrykket
returnerer sandt eller falsk baseret i dette tilfælde returneres
"værdien" så at sige af .checked på elementet (true eller false) ...

... Ved godt at mine koder er lidt kompakte ... er de for kompakte?

... en lille retter til den jeg kastede:
var name=user.name;; -> var name=user.name;
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 00:17 #9
Takker

>>> "... Ved godt at mine koder er lidt kompakte ... er de for kompakte?"

Nej nej .. er jo det jeg gerne vil lære.... At gøre mine script så små og efektive som muligt
men den sidste er godt nok noget  minimalistisk ... men hvis jeg koncentrer mig kan jeg vel godt finde ud af hvad du har gjort ... især hvis jeg nærlæser dine første indlæg.. de ser ud til at bringe mig frem til din sidste løsning ;-)
Som du ser kan jeg få det til at virke, men vil gerne der bliver lidt mere "Prof" hvis du fostår ...

Tusind tak for din indsats
Avatar billede mclemens Nybegynder
24. september 2006 - 00:39 #10
<input type="checkbox" name="owner4" value="" onclick=" ChmodCalculator(this)">
// Ved click på check boxen sender vi referencen (this med op til funktionen)

<input type="text" name="t_owner" value="0" align="center" size="2">
// Vores resultat felt deler samme "fornavn" som de individuelle checkboxe
har, dog er det her resultat feltets efternavn. (owner4 vs. t_owner)



function ChmodCalculator(user){ // Vi modtager en reference til checkboxen

var f=user.form; // checkboxen lægger i en form den hapser vi lige for en
lille reference variabel vi kalder for f.



var name=user.name;; // checkboxen har et navn, den snupper vi lige til videre brug



var val=parseInt(name.substr(name.length-1)); // for at få værdien som står i slutningen af checkbox'ens name bruger vi substr til at fjerne alle tegn fra start til slut - 1 tegn ... vi bruger så parseInt() så relsutatet opfattes som et tal istedet for en tekststreng



var elm=f["t_"+name.substr(0,name.length-1)]; // resultat elementet lægger i samme form som vores checkbox der blev klikket på (vi bruger form reference variablen f)

// elementet der er vores resultat element starter sit name med t_ derfor skriver vi inde i [] "t_" til at starte på ...

// navnet på elementet vi skal føre resultatet ind i havde jo det samme efternavn som det element vi har klikket på har som fornavn så vi tager alle tegnene fra checkboxens name (via. substr ... bortset fra det sidste tegn der var værdien)

- linjen ser i dette tilfælde sådan her ud (for js-parseren)
var elm=f["t_owner"]; ... men resultatet afhænger af checkboxen,
grundet håndteringen af checkbox'ens name ...




elm.value=parseInt(elm.value)+((user.checked)?+val:-val);
// nu har vi endelig fat i resultat elementet og har regnet val variablen ud udfra
navnet på den checkbox vi klikkede på - vi tildeler så værdien af resultat elementet til dens egen værdi (parseInt() da det ellers opfattes som tekst) og så lægger vi

den udregnede val værdi til eller trækker den fra afhængig af om checkobxen vi klikkede på er checked eller ej (true / false)


}


[ >>> "... Ved godt at mine koder er lidt kompakte ... er de for kompakte?"

Nej nej .. er jo det jeg gerne vil lære.... At gøre mine script så små og efektive som muligt
men den sidste er godt nok noget  minimalistisk ]
Ja, den bliver nok lidt kort i det ... der
skal måske lige en forklaring vedhæftes :D


- Ved ikke om du har nuppet en kigger på Ole's artikkel eller
om det er for tidligt ? http://www.eksperten.dk/artikler/227
... Jeg startede i marts med at scripte og må indrømme at det
nok er gået lidt for hurtigt ... men jeg skulle jo op i xml dom
så hurtigt som muligt (da jeg kører xhtml) - jeg blev umiddelbart
lidt forvirret af Ole's artikkel da jeg nåede til objecterne, men
det hjalp noget på scripts med behov for object håndtering :o)


[ Tusind tak for din indsats ] Velbekom, og tak for point :o)


P.s.: hvis du kører xhtml så skift til
getAttribute og setAttribute eksempel:

function ChmodCalculator(user){
var f=user.form;
var name=user.getAttribute("name");
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
elm.setAttribute("value",parseInt(elm.getAttribute("value"))+((user.checked)?+val:-val));
}
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 00:52 #11
Igen mange tak .. meget venligt af dig

Nej pt er det ikke i xhtml (Har ikke den store lyst til XHTML før IE understøtter ægte XHTML1.1 vilket jo nok bliver når andre understøtter XHTML 2.0 *G*)
Men har gemt begge versioner af dem nu ...Tak
Egneligt er den lille form bare lavet fordi jeg aldrig kan huske hvad feks chmod 655 er .*G* ..  I min FTP sætter jeg bare hak
i hvad jeg ønsker (lige som i formen) så når en tutorial eller guide siger sæt chmod til feks 764 kang aldrig huske hvad det er
*G*

http://www.eksperten.dk/spm/734265
Avatar billede mclemens Nybegynder
24. september 2006 - 01:16 #12
Den ser også pæn ud, til en
hurtig lille opslagsdims :o)

... Her er lige lidt object gejl for bonus pointene ;)
- prøv at skrive tallet i din boks :)


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

<html>

    <head>
        <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
        <title>Chmod permission calculator</title>
    </head>

    <body>
        <script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
var elmv=parseInt(elm.value)?parseInt(elm.value):0;
var elmv=elmv+((user.checked)?+val:-val);
elm.value=(elmv>0)?elmv:"";
}

function fastcalc(e){
  f=e.form;
  elms=(e.value==7)?{4:1,2:1,1:1}:(e.value==6)?{4:1,2:1,1:0}:(e.value==5)?{4:1,2:0,1:1}:(e.value==3)?{4:0,2:1,1:1}:(e.value==4)?{4:1,2:0,1:0}:(e.value==2)?{4:0,2:1,1:0}:(e.value==1)?{4:0,2:0,1:1}:{4:0,2:0,1:0};
  for(i in elms)document.getElementsByName(e.name.substr(2)+i)[0].checked=(elms[i]==1);
}


</script>
        <div align="center">
            <form name="chmodcalc">
                <span class="body"><input name="h_owner" type="hidden" value=""> <input name="h_group" type="hidden" value=""> <input name="h_other" type="hidden" value=""> </span>
                <table cellpadding="5" bgcolor="black">
                    <tr>
                        <td colspan="5" align="center" bgcolor="#0099ff">
                            <h3><b>Chmod calculator</b></h3>
                        </td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Permission</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;<b>Read&nbsp;&nbsp;</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;<b>Write&nbsp;</b></td>
                        <td bgcolor="#dcdcdc"><b>Execute</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;</td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Owner</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner4" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner2" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner1" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_owner" value="" align="center" size="2" onkeyup="fastcalc(this);"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Group</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group4" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group2" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group1" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_group" value="" size="2" onkeyup="fastcalc(this);"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Other</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other4" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other2" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other1" value="" onclick=" ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_other" value="" size="2" onkeyup="fastcalc(this);"></td>
                    </tr>
                    <tr align="center">
                        <td align="center" colspan="5" bgcolor="#0099ff"><input type="reset"></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>

</html>
Avatar billede mclemens Nybegynder
24. september 2006 - 01:30 #13
Ændringerne i første funktion:

var elmv=parseInt(elm.value)?parseInt(elm.value):0; // der checkes på om elm.value (resultat feltets værdi) hvorvidt det repræsenterer et tal - hvis det gør tildeles den nuværende værdi af feltet - ellers bruges 0

var elmv=elmv+((user.checked)?+val:-val); // afhængig af om checkboxen er checked øges eller reduceres værdien som tidligere

elm.value=(elmv>0)?elmv:""; // hvis værdien ikke er over 0 sættes værdien til ingenting



og så hovedpinen ;)


<input type="text" name="t_other" value="" size="2" onkeyup="fastcalc(this);">
- hver gang tasten ryger op i input feltet laves en ny beregning baseret på navnet og værdien (sender referencen this)




function fastcalc(e){ // vi modtager referencen
  f=e.form; // vi laver en reference til form'en

// nedenstående linje er splittet op for overskuelighedens skyld

  elms= // elms defineres til et object udfra hvad resultat feltets værdi er bør nok have været var elms - for at være sikker på at undgå konflikter med globale variabler (for at bruge lokal variabel)

(e.value==7)?{4:1,2:1,1:1}: // hvis værdien er 7 er 4 checked (1) 2 - cheked 1 - checked

(e.value==6)?{4:1,2:1,1:0}: // ellers hvis det er 6 så er 4 checked 2 checked og 1 unchecked

o.s.v.

(e.value==5)?{4:1,2:0,1:1}:(e.value==3)?{4:0,2:1,1:1}:(e.value==4)?{4:1,2:0,1:0}:(e.value==2)?{4:0,2:1,1:0}:(e.value==1)?{4:0,2:0,1:1}:

{4:0,2:0,1:0}; // ellers hvis værdien ikke stemte med nogen af tallene er de alle 0 (unchecked)



for(i in elms) // vi gennemløber objectet

document.getElementsByName(e.name.substr(2)+i)[0].checked=
- i ovenstående står der så navnet på resultat feltet minus de to første tegn samt det nuværende gennemløbs værdi af objectet (i repræsenterer variablerne i objectet - her 4 , 2 , 1) og elms[i] er værdien af variablen her 1 eller 0

// checked tildeles værdien true eller false baseret på returneringen af parantesen (sand / falsk) ... hvis nu værdien er 1 bliver det nuværende felt checked ellers unchecked

(elms[i]==1);
}

... Hvis det virker forvirrende så er du ikke den første der synes det, jeg
skulle også lige fange styrken i det da Ole nævnte hans artikkel om objecter :)
Avatar billede mclemens Nybegynder
24. september 2006 - 01:36 #14
... Ovenstående kan også forkortes til et
globalt object så det kører mere flydende...


<script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
var elmv=parseInt(elm.value)?parseInt(elm.value):0;
var elmv=elmv+((user.checked)?+val:-val);
elm.value=(elmv>0)?elmv:"";
}

var elms={7:{4:1,2:1,1:1},6:{4:1,2:1,1:0},5:{4:1,2:0,1:1},4:{4:1,2:0,1:0},3:{4:0,2:1,1:1},2:{4:0,2:1,1:0},1:{4:0,2:0,1:1}};

function fastcalc(e){
  f=e.form;
  elmse=(elms[e.value])?elms[e.value]:{4:0,2:0,1:0};
  for(i in elmse)document.getElementsByName(e.name.substr(2)+i)[0].checked=(elmse[i]==1);
}


</script>
Avatar billede mclemens Nybegynder
24. september 2006 - 01:51 #15
Du får lige den sidste forkortelse ;)

<script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
var elmv=parseInt(elm.value)?parseInt(elm.value):0;
var elmv=elmv+((user.checked)?+val:-val);
elm.value=(elmv>0)?elmv:"";
}


function fastcalc(e){
  f=e.form;
  var elms={7:"421",6:"42",5:"41",4:"4",3:"21",2:"2",1:"1",0:"0"};
  var elms=(parseInt(e.value)<7&&parseInt(e.value)>0)?elms[e.value]:elms[0];
  var runs=[4,2,1];
  for(i=0;i<runs.length;i++)document.getElementsByName(e.name.substr(2)+runs[i])[0].checked=(elms.indexOf(runs[i])!=-1);
}


</script>
Avatar billede mclemens Nybegynder
24. september 2006 - 01:51 #16
... Så er der noget at vælge imellem ;)
Avatar billede mclemens Nybegynder
24. september 2006 - 01:54 #17
(Indrømmer at det er "tungt skyts"...)
- Du spørg hvis du skal have en forklaring
eller uddybning på noget af det ;)
(hopper til køjse nu ... nat,nat)
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 02:47 #18
Du er da som en ludoman på speed i et casino ...

Ikke til at stoppe ...*S*


Skal nok bruge noget tid på at gennemgå det du har lavet
Men hvis du kan lære det kan jeg vel også (Sagt med håbb i stemmen)

Drøm godt og binært ;-)
Avatar billede mclemens Nybegynder
24. september 2006 - 10:45 #19
Hehe, takker :)
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 14:13 #20
Jamen indtilnu kan jeg da følge med ..
jeg får dog en fejl i IE

expected indentifier or string
var elms=(e.value==7)?{4:1,2:1,1:1}:(e.value==6)?{4:1,2:1,1:0}:(e.value==5)?{4:1,2:0,1:1}:(e.value==3)?{4:0,2:1,1:1}:(e.value==4)?{4:1,2:0,1:0}:(e.value==2)?{4:0,2:1,1:0}:(e.value==1)?{4:0,2:0,1:1}:{4:0,2:0,1:0};
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 14:32 #21
Det lader til det kun er
function fastcalc(e){
var f=e.form;
var elms=(e.value==7)?{4:1,2:1,1:1}:(e.value==6)?{4:1,2:1,1:0}:(e.value==5)?{4:1,2:0,1:1}:(e.value==3)?{4:0,2:1,1:1}:(e.value==4)?{4:1,2:0,1:0}:(e.value==2)?{4:0,2:1,1:0}:(e.value==1)?{4:0,2:0,1:1}:{4:0,2:0,1:0};
for(i in elms)document.getElementsByName(e.name.substr(2)+i)[0].checked=(elms[i]==1);
}

Og der er en lille hage ...
Hvis man skrive feks 8 i feltet så sker der rigtigtnok ikke noget, men hvis man så checker en bok af, lægger den 8 til resultatet
Den forsøger jeg lige nu at finde en løsning på
Avatar billede mclemens Nybegynder
24. september 2006 - 16:38 #22
Hvad med:




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

<html>

    <head>
        <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
        <title>Chmod permission calculator</title>
    </head>

    <body>
        <script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
var elmv=parseInt(elm.value)?parseInt(elm.value):0;
var elmv=elmv+((user.checked)?+val:-val);
elm.value=(elmv>0)?elmv:"";
}

function fastcalc(e){
  var f=e.form;
  var

elms=(e.value==7)?{4:1,2:1,1:1}:(e.value==6)?{4:1,2:1,1:0}:(e.value==5)?{4:1,2:0,1:1}:(e.value==3)?{4:0,2:1,1:1}:(e.value==4)

?{4:1,2:0,1:0}:(e.value==2)?{4:0,2:1,1:0}:(e.value==1)?{4:0,2:0,1:1}:{4:0,2:0,1:0};
  for(i in elms)document.getElementsByName(e.name.substr(2)+i)[0].checked=(elms[i]==1);
  if(elms[i]==0){
    e.value="";
    alert("1 - 7 er gyldigt");
  }
}


</script>
        <div align="center">
            <form name="chmodcalc">
                <span class="body"><input name="h_owner" type="hidden" value=""> <input name="h_group" type="hidden"

value=""> <input name="h_other" type="hidden" value=""> </span>
                <table cellpadding="5" bgcolor="black">
                    <tr>
                        <td colspan="5" align="center" bgcolor="#0099ff">
                            <h3><b>Chmod calculator</b></h3>
                        </td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Permission</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;<b>Read&nbsp;&nbsp;</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;<b>Write&nbsp;</b></td>
                        <td bgcolor="#dcdcdc"><b>Execute</b></td>
                        <td bgcolor="#dcdcdc">&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;</td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Owner</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner4" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner2" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="owner1" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_owner" value="" align="center" size="2"

onkeyup="fastcalc(this);"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Group</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group4" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group2" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="group1" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_group" value="" size="2"

onkeyup="fastcalc(this);"></td>
                    </tr>
                    <tr align="center">
                        <td align="left" bgcolor="#dcdcdc"><b>Other</b></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other4" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other2" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="checkbox" name="other1" value="" onclick="

ChmodCalculator(this)"></td>
                        <td bgcolor="#dcdcdc"><input type="text" name="t_other" value="" size="2"

onkeyup="fastcalc(this);"></td>
                    </tr>
                    <tr align="center">
                        <td align="center" colspan="5" bgcolor="#0099ff"><input type="reset"></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>

</html>


(undskyld fravær, det sker hver dag mellem ca. 13:30 -> 17:00)
Avatar billede mclemens Nybegynder
24. september 2006 - 16:58 #23
^ - ovenstående med denne script del:

<script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
var elmv=parseInt(elm.value)?parseInt(elm.value):0;
var elmv=elmv+((user.checked)?+val:-val);
elm.value=(elmv>0)?elmv:"";
}


function fastcalc(e){
  f=e.form;
  var elms={7:"421",6:"42",5:"41",4:"4",3:"21",2:"2",1:"1",0:"0"};
  var elms=(parseInt(e.value)<8&&parseInt(e.value)>0)?elms[e.value]:elms[0];
  var runs=[4,2,1];
  for(i=0;i<runs.length;i++)document.getElementsByName(e.name.substr(2)+runs[i])[0].checked=(elms.indexOf(runs[i])!=-1);
  if(elms=="0"){
    e.value="";
    alert("1 - 7 er gyldigt");
  }
}

</script>

burde også virke :o)

- er fejlen i 24/09-2006 14:13:39
løst eller hvordan ser jeg fejlen i IE ?
Avatar billede mclemens Nybegynder
24. september 2006 - 17:24 #24
Ved ikke om man skulle kaste en onfocus="this.value='';" på
resultat felterne så man er fri for at slette det tidligere ...
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 18:34 #25
Fik det mht 8 til at virke på denne måde
function CnameCalculator(e){
var f=e.form;
var elms=(e.value==7)?{4:1,2:1,1:1}:(e.value==6)?{4:1,2:1,1:0}:(e.value==5)?{4:1,2:0,1:1}:(e.value==3)?{4:0,2:1,1:1}:(e.value==4)?{4:1,2:0,1:0}:(e.value==2)?{4:0,2:1,1:0}:(e.value==1)?{4:0,2:0,1:1}:{4:0,2:0,1:0};
if(e.value>=8){
e.value = 0;
}
for(i in elms)document.getElementsByName(e.name.substr(2)+i)[0].checked=(elms[i]==1);
}
Men vil da forsøge med din metode
den med onfocus="this.value='';" er vist en god ide ;-)
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 18:45 #26
onfocus="this.value='';" virker fint ... god ide

mht til scriptet så er det kun den sidte version jeg nævnte der virker men kun i FF og NN ... ikke i IE der får jeg "expected indentifier or string" I "var elms= " linierne
Avatar billede mclemens Nybegynder
24. september 2006 - 18:50 #27
Nåh, ja ... Du sidder på mac...
Well det må vel være forældet IE ...
IE 6.0 virker og fremad burde også virke.

24/09-2006 16:38:22 blev dog ombrudt
- så linjen skal samles manuelt ...
Ved dog ikke om den del påvirker.

- Men hvis den sidste virker er det jo super :)
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 19:10 #28
Ja .. er IE Mac 5.1 der ikke vil ... og ja... den er nær pensionsalderen

Ved ikke hvorfor men er kun 24/09-2006 18:34:24 versionen der virker i NN og FF ud af alle dem du er kommet med... men hovedsagen er det virker ;-)
Avatar billede mclemens Nybegynder
24. september 2006 - 19:40 #29
Studsede lige lidt over det og testede så ...
Hvis jeg tog 16:58:30 og rettede til:



<script type="text/javascript">

function ChmodCalculator(user){
var f=user.form;
var name=user.name;;
var val=parseInt(name.substr(name.length-1));
var elm=f["t_"+name.substr(0,name.length-1)];
var elmv=parseInt(elm.value)?parseInt(elm.value):0;
var elmv=elmv+((user.checked)?+val:-val);
elm.value=(elmv>0)?elmv:"";
}


function fastcalc(e){
  f=e.form;
  var elms={7:"421",6:"42",5:"41",4:"4",3:"21",2:"2",1:"1",0:"0"};
  var elms=(parseInt(e.value)<8&&parseInt(e.value)>0)?elms[e.value]:elms[0];
  var runs=[4,2,1];
 

for(i=0;i<runs.length;i++)document.getElementsByName(e.name.substr(2)+runs[i])[0].checked

=(elms.indexOf(runs[i])!=-1);
  if(elms=="0"){
    e.value=0;
  }
}

</script>

... Så virker den uden fejl i NN ... men hvad den ikke kan
lide ved e.value=""; istedet for e.value=0; og den alert("noget");
undrer mig lidt ... (måske også fejlen ved de andre...)
Avatar billede mclemens Nybegynder
24. september 2006 - 19:41 #30
... Hmm,
for(i=0;i<runs.length;i++)document.getElementsByName(e.name.substr(2)+runs[i])[0].checked

=(elms.indexOf(runs[i])!=-1);

skulle have været:

for(i=0;i<runs.length;i++)document.getElementsByName(e.name.substr(2)+runs[i])[0].checked=(elms.indexOf(runs[i])!=-1);
Avatar billede jesper-moeller Nybegynder
24. september 2006 - 19:50 #31
Der vil altid være noget at undre sig over ...
Men haar da noget at lege med og lære af nu ...*S*
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