17. maj 2005 - 08:40Der er
40 kommentarer og 1 løsning
Fange felt som har fået navn som et array
Ja, det er nok rimeligt simpelt, men jeg kan ikke lige nu se hvordan det skal gøres, og kunne ikke lige finde et spørgsmål herom på E!, selvom det sikkert er der.
Jeg har en række felter, som jeg skal have hevet værdien ud af , så jeg kan beregne noget med den. Problemet er at felternes navne (name) er kost1[1][1], kost1[1][2], kost1[2][1] osv. osv. indtil arrayet er tomt. Altså er det placeringerne i arrayet som ændre sig, alt efter hvor mange kostpriser til hver norm, som kost1[][] dækker over, brugeren indtaster.
Min form hedder ds, men når jeg prøver at hente ds.kost1[1][1].value, så tror den at den skal finde ds.kost1.1.1 og den finde jo logisk nok ikke.
Hov, det virker med document.forms.de.elements(), jeg havde bare kopieret koden herfra, og lagde ikke lige mærke til at du kaldet feltet for kost istedet for kost1.
Nu skal jeg bare have funktionen lavet så den dynamisk kan løbe alle felterne igennem. De løber fra kost1 - kost2, første parameter bliver dynamisk senere med er pt. fast, så den kan løbe fra kost1[1] til kost1[8], og den sidste er dynamisk, men løber dog nu fra kost1[][1] til kost1[][18].
den var værre for det er jo nemt nok nu når de er faste. Men hvordan skal man lure den dynamiske størrelse? Du kunne vælge at give dem deres nuværende navn som id, det er jo unikt så det må være acceptabelt. Som name kunne du så give dem name="kost1" og name="kost2" document.getElementsByName('kost1').length vil så være antallet af kost1 Problemet er så - hvor mange af dem er første parameter og hvor mange anden parameter...hmm svær
Med mindre du skal gøre det samme med hvert felt?? For så hvis jeg var dig så ville jeg give dem id="kost1[1][3]" osv og alle sammen name="kost", så kan du loope dem igennem sådan her -- var elms = document.getElementsByName('kost') for (i=0;i<elms.length;i++){ //og så din kode her fx if(elms.value = 3){alert('du har tastet 3 men det er for meget'} }
name værdien vil jeg helst ikke ændre, da denne bruges via php til at gemme værdierne i felterne, og der lidt for meget der skal ændres hvis det skal laves om.
For at gøre det mere synligt, kan jeg sige at opbygningenmæssigt kan du sammenligne det med en tabel. Dem har jeg 4 af, deraf kost1 til kost4. Rækkerne i hver tabel er så den første parameter, altså kost1[1]. Den er pt. max. 8, men bliver altså nok dynamisk i fremtiden. Kolonnerne er så den sidste parameter, altså kost1[][1]. Den er på 16 pt, men er dynamisk.
Ok .. men hvis du i php laver siden, så vil du jo også i php vide hvor mange du genererer...du vil også i php udskrive den js funktion som skal loope elementerne igennem :o) dvs du i php kan finde størrelserne på array´ne og i <scipt> uden for din funktion kan erklære størrelsen
ja det er bestemt en mulighed med hidden fields, et til hver størrelse <input type="hidden" id="kost1_1" value="8"> <input type="hidden" id="kost1_2" value="18"> <input type="hidden" id="kost2_1" value="5"> <input type="hidden" id="kost2_2" value="22"> sådan noget lignende
Hold kæft hvor kan man være dum, jeg tror sgu ikke helt min hjerne er komemt fra "ferie" endnu. Der skulle selvfølgelig ikke stå rakke med i, som er variablen fra forløkken, men anyway, det gør jo ikke det store forskel.
Det ser ud til at virke, jeg får i hvertfald de rigtigt værdier printet ud. Nu skal jeg bare lige have løbet alle felter igennem, beregnet noget derpå og lagt den ny værdi i de gamle felter.
Som Garfield sagde til Futte, da han så 3 pakker lasagne. "Cover me, I'm going in." ;-)
Jeg lader lige spg. stå åbent indtil det hele virker, det kunne jo være jeg løb i andre problemer, ok?
Okay, så er jeg har igen, men er næsten færdig nu. ;-)
Jeg har bare et problem. Jeg skal have fat i et nyt array, som bliver lavet i en php-siden for sig selv, denne bliver som included i php-siden jeg nu arbejder på.
Arrayet hedder $TILLAEGOVERFLADE, men jeg synes ikke rigtigt jeg kan få fat i arrayet, hvor jeg skal bruge de forskellige værdi til udregningen.
Nu er jeg ikke super haj til php Men jeg vil mene at hvis du i en fil includer en anden så bør du derefter kunne referere til dine variable i den includerede fil. Men selvfølgelig ikke før
Selvom php-koden hvor jeg includer siden med $TILLAEGOVERFLADE ligger aller først og javascript delen først kommer derefter, så er det som om det ikke findes. Her det noget at sige, at beregningen først skal udføres når jeg trykker på en knap?
-- og det hører jo så også med, at elements er en collection, og derfor skal adresseres med array-notation (selvom jeg også godt ved, at IE er ligeglad !-)
<script language="javascript"> <?php echo $TILLAEGOVERFLADE[$mld];?>; function validate(){ var rakke = document.forms.ds.elements('rakke').value; var kolonne = document.forms.ds.elements('kolonne').value; var antaltyper = document.forms.ds.elements('antaltyper').value; var tillag = document.forms.ds.elements('tillag').value;
if (rakke == "" || kolonne == ""){ alert("Grundet en fejl i antallet af produktionsmetoder, korrosionklasser samt spændvidder/vægtklasser, kan værdierne ikke udregnes. Opdatere siden og prøv igen. Se du denne fejl igen, så kontakt systemudvikleren."); } else {
for (i=1; i<=rakke; i++){ <?php $mld = 1;?>; for (j=1; j<=kolonne; j++) {
Afsnit3.php, som indeholder $TILLAEGOVERFLADE[]. Ved godt at 1 mangler, med det er en lille bug, som ikke betyder noget. $TILLAEGOVERFLADE = array( "2" => "0.25", "3" => "0.65", "4" => "1.05", "5" => "1.9", "6" => "1.9",
Det er altså den jeg skal bruge, og løbe igennem, pt for hvert tredje af de tidligere nævnte felter.
hvis det er det her der går galt //var tillag = document.forms.ds.elements('TILLAEGOVERFLADE['+mld+']').value; Så skal det jo være //var tillag = document.forms.ds.elements('<?=$TILLAEGOVERFLADE[$mld]?>').value;
strange måske du skulle putte et spørgsmål i php kategorien. For hvis de variable ikke kommer med når du inkluderer...hmm.. Ja så aner jeg ikke hvorfor de ikke gør det :o(
Det er ikke fordi variablerne ikke kommer med, jeg bruger dem senere, jeg kan bare ikke fange lige netop arrayet $TILLAEGOVERFLADE i js.
Men selvom det er lidt kompleks at forklare kan jeg da prøve.
Det er et administrationmodul til et system som er i brug.
På en af siderne i admin, kan brugerne angiver en masse ting, bl.a. hvor mange korrosionsklasser der er(grund., galvaniseret o.l.), samt hvad ekstra prisen er for disse i forhold til ingen, som er 0.
Disse værdier bliver faktisk skrevet i en fil på serveren, som dog er en ren php-fil. Det er bl.a. denne som includes, og heri ligger $TILLAEGOVERFLADE[].
På en anden side i admin, skal brugerne så indtaste en grundpris for deres varer, uden overfladebehandling (korrosion). Derefter skal de resterende felter, udregnes alt efter hvilken overfladebehandling samt produktionsmetode(robot, cnc o.l.) de har.
Dette sker ved klik på en knap, som altså kalder functionen validate(), som så skal udregne felternes pålydende værdi og skrive den i dem. Dertil skal jeg altså bruge overfladeprisen ($TILLAEGOVERFLADE) i js.
Problemet er at få fat i den, udregningerne skulle ikke være noget problem, hvis bare jeg har en værdi at kunne lægge til.
function validate(){ var rakke = document.forms.ds.elements('rakke').value; var kolonne = document.forms.ds.elements('kolonne').value; var antaltyper = document.forms.ds.elements('antaltyper').value; //var tillag = document.forms.ds.elements('tillag').value;
if (rakke == "" || kolonne == ""){ alert("På grund af en fejl i antallet af produktionsmetoder, korrosionklasser samt spændvidder/vægtklasser, kan værdierne ikke udregnes. Opdatere siden og prøv igen. Se du denne fejl igen, så kontakt systemudvikleren."); } else {
for (i=1; i<=rakke; i++){ var lars=1; <?php echo $mld = 1; $tip = 0;?>; for (j=1; j<=kolonne; j++) { //alert(j);//giver 1-18 pt modulus = j % antaltyper; if (modulus==0){ modulus=antaltyper; }
Mit problem er den udkommenterede linie, //var tmp = <?php echo $TILLAEGOVERFLADE[$mld];?>;
Her skulle jeg have $mld til automatisk at komme med en placering i arrayet $TILLAEGOVERFLADE, men $mld bliver ikke talt op mærkeligt nok. Derimod kan jeg godt få talt en js-variabel op, men hvordan få jeg den ind i linie i stedet for $mld?
Synes godt om
Ny brugerNybegynder
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.