15. april 2006 - 15:59Der er
138 kommentarer og 1 løsning
Felter i flere "niveauer" via DOM-programmering
Hej Eksperter!
Jeg skal have lavet muligheden for at tilføje en ubestemt antal felter således man kan lave forskellige varianter med forskellige værdier (skal bruges til en webshop således man fx kan indskrive farve, størrelse, kvalitet og meget meget andet)
Jeg er selv gået i gang med det kniber en smule for mig på dette område!
Som i kan se kan man godt tilføje varianter og også værdier til den første variant, men ikke til de varianter man tilføjer manuelt!
Håber der er nogen der kan få mit script til at fungere optimalt! (Det skal meget gerne laves således at man kan slette varianter og værdier "on-the-run" i scriptet via grafikstumperne...
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
det er ikke helt så effektivt igen... der burde vel egentlig oprettes en ny tabel istedet for at manipulere ved en ... men jeg er lidt doven idag så vi kører bare videre på den - det er jo browserens resourcer og ikke serverens :P kigger lige på sletning :P
function removevariant(tmpid){ if(confirm("Er du sikker på du vil fjerne denne variant?")){ alert("Fjerner"); rem=document.getElementById(tmpid.replace("img_","")); par=document.getElementById("variant"); par.removeChild(rem); } } </script></head>
function removevariant(tmpid){ if(confirm("Er du sikker på du vil fjerne denne variant?")){ alert("Fjerner"); rem=document.getElementById(tmpid.replace("img_","")); par=document.getElementById("variant"); par.removeChild(rem); } }
function removetype(tmpid,tmpid2){ alert(tmpid); alert(tmpid2); if(confirm("Er du sikker på du vil fjerne denne type?")){ alert("Fjerner"); rem=document.getElementById(tmpid.replace("img_","")); par=document.getElementById(tmpid2.replace("img_","")); par.removeChild(rem); } } </script></head>
1) Jeg skal submitte felterne over i noget dynamisk php, men eftersom det ikke ligger sig i et array hvordan tilgår jeg dem bedst? Jeg kan jo ikke være sikker på at jeg kan tilgå dem efter nummeret da fx variant_2 kan være slettet selvom variant_3 findes - Kunne man lave en sumup-felt som indeholdt antallet af varianter?
2) Hvis man sletter variant_1 kikser resten af scriptet - Kunne man evt. lave en variant_0 som var skjult og som blot skulle fungere som "skabelon" for resten af felterne?
3) Somme problem som punkt 2: Hvis man sletter model_1_1-rækken kokser resten af tilføjelserne - Hvordan kan det problem løses?
4) Burde scriptet virke i alle browsere eller er det en IE-ting?
1: Joh, et array vil være sagen ... men vi bør nok kigge lidt dybere i koden m.h.t. id og name på de forskellige varianter og typer så vi ikke får konflikter ved sletninger og tildelinger.
2: [Hvis man sletter variant_1 kikser resten af scriptet - Kunne man evt. lave en variant_0 som var skjult] - ikke ideelt... fylder ... [ og som blot skulle fungere som "skabelon" for resten af felterne? ] - en skabelon inkluderet i scriptet istedet med variant count up og array's dertil med type count up må være vejen istedet...
3: ^ Samme som ovenstående som jeg nævnte i http://www.eksperten.dk/spm/702912#rid6209019 er det ikke optimalt med et script der baserer sig på indhold der kan slettet... ulemper: det gør hurtigt scriptet langt, indviklet og en smule uhåndterligt...
4: checker lige op på den (anden pc. med ie, ff, opera, netscape og vender tilbage senere...
[ (Kan være der kommer mere) ] ... skal lige have en puster samt en pepsi og en pose chips frem nu :P
[ Kiggede lige i FF - Der bliver der ikke automatisk tilføjet et type-felt under varianten når man tilføjer en ny ] - ok, men vi skal have scriptet omkodet så det kigger vi på senere...
Jeg er skam helt ligeglad med hvordan det er bygget op - Kendte blot kun denne metode via noget hjælp jeg fik fra roenving herinde engang - Jeg er blot alt den hjælp du vil give mig taknemmelig :) Du er fået lidt karmatildeling som første afdrag på din store hjælp - pointene er selvfølgelig også dine når vi bliver færdige :)
Men hvis du har tiden og lysten til det, må du meget gerne eksperimentere med andre metoder hvis de er bedre og hurtigere!
lige en lille ting grunden til problemet med ff før var åbenbart at mellemrum kan ske at blive talt talt som childnodes mens ie ser bort fra dette... spørg mig ikke hvorfor...
okay har ingen idé om hvordan det fungerer med divs, men vil stadig gå ud fra det er via noget DOM-programmering så det foregår i browseren uden refresh osv...?
Jeg kigger ind løbende og ser hvad der sker... c¨,)
hehe, du er nysgerrig... <div> / <table> det er det samme (næsten) forskellen ligger mere i, at hvis jeg skal lave det med tables, skal jeg hver gang jeg med dom skulle lave denne linje (så vidt jeg ved... har jo lige lært javascript :/ ):
skulle der laves noget i denne stil (ikke tables hver gang men der skulle noget tr og td med hver gang selvom tbody og table ikke skulle med... et lidt voldsomt eksempel (ingen er testet - men mere til illustrering)
Leger p.t. kun lokalt da jeg ikke "sidder" på en server... loader lidt op lidt senere grundstenen (layout) skal lige være lidt færdig først... her er et oplæg men det siger ikke meget uden css er sat op... mcfvhold er her holderen til varianterne og så videre... men det tager lige lidt tid ...
mcf0=""; /* Scriptet startes og vi laver en forbindelse til stedet indholdet skal indsættes */ window.onload=function(){ mcfaddvariant('reset'); mcf0=document.getElementById("mcfvhold"); }
mcfvars = new Array();
/* Script til tilføjelse af start holder til variantnoder samt flere variantnode */ function mcfaddvariant(ctrl){ mcftnh = new Array(); // Holder til konstruktionsnoder
/* Fjerner alle noder i et element med id="mcfappplc" hvis der foretages reset (opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
mcf0=""; /* Scriptet startes og vi laver en forbindelse til stedet indholdet skal indsættes */ window.onload=function(){ mcfaddvariant('reset'); mcf0=document.getElementById("mcfvhold"); }
mcfvars = new Array();
/* Script til tilføjelse af start holder til variantnoder samt flere variantnode */ function mcfaddvariant(ctrl){ mcftnh = new Array(); // Holder til konstruktionsnoder
/* Fjerner alle noder i et element med id="mcfappplc" hvis der foretages reset (opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
</script></head>
<body onclick="alert(document.body.innerHTML);">
<div class="mcfcont"> <div id="mcfvhold">
<div style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px 0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div>
/* Fjerner alle noder i et element med id="mcfappplc" hvis der foretages reset (opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
</script></head>
<body onclick="alert(document.body.innerHTML);">
<div class="mcfcont"> <div id="mcfvhold">
<div style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px 0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div>
Det var start formularen så skal kontrol array's, tilføjelse, fjernelse af typer og det samme for varianter indbygges sammen med nogle inputs der tæller sammen... og lidt design på det bare html :P ... her er lidt arbejde til dig (mellemrum)...w w w.d k i f.c o m/users/mclemens/js/dom/tmp/tmp.html - jeg poster løsningen herinde til sidst da løsningen skal være på eksperten.dk ... men du kan jo se lidt midlertidig fremskridt istedet for at jeg spammer tråden... (adressen opdateres ikke løbende)
... kigger nok først på array kombinering og input kombinering i aften... - et par spørsmål hertil: 1. Skal det være muligt at submitte med 1 tom variant værdi ? 2. Skal det være muligt at submitte med 1 tom type værdi under 1 variant ? 3. Skal der være et maksimum på antal af varianter ? 4. Skal der være et maksimum på antal af inputs pr. variant ? 5. Er der nogle tegn der ikke må forkomme i input felterne? 6. Hvad skal den streng der modtages adskilles med pr. værdi f.eks ";" , "," , "[,]" og så videre... det tegn/tegnkombination der vælges vil blive deaktiveret som samlet input så man ikke kan indtaste det så array'et går i stykker?
... Ved ikke om jeg kan alt det her (ikke så prof. som roenving og olebole m.fl.), men jeg prøver da om vi ikke lige kan få det sidste på plads ...
1. Ja det må gerne være muligt, men det tomme felt skal blot ikke behandles på serversiden
2. Ja - Strengen skal så blot være tom (evt. null)
3 + 4. Nej
5. Tjae, det er da sikkert, men lige pt. har jeg ikke skrevet denne del endnu, men hvis den blot kun acceptere standard tegn (såsom bogstaver +æøå i store så vel små udgaver, tal, mellemrum, punktum, kolon, og -+_/) så burde det være fint - Jeg kan vel altid selv tilpasse det senere i en reg.exp.?
6. Varianter kunne adskilles med ; og typer inden for hver variant kunne adskilles med komma!?
1-4, ok 5, det burde der ikke være noget i vejen for...
6, ok jeg adskiller med [;] og [,] - bemærk med klammerne også for ellers kan folk ikke sætte komma i en beskrivelse uden at det driller dig serverside... regner med at putte det hele ind i en lang streng f.eks.: Sko[,]blå[,]pris[,]vægt[,]røde[,]pris[,]vægt[,]grønne[,]pris[,]vægt[;]hat[,]blå[,]pris[,]vægt[,]røde[,]pris[,]vægt[,]grønne[,]pris[,]vægt
^ herefter kan du splitte strengen serverside ... ved ikke om der er en begrænsning for hvor lang en streng man kan poste eller hvor meget man kan poste pr. gang???
... alternativt kunne det hele puttes i en cookie ved onsubmit i samme format som ovenstående og den cookie kunne så requestes serverside - men kigger på at lave de arrays først...
tror helt sikkert ikke der kan blive noget problem i længden af en streg - man kan jo fx poste filer på flere mb så hvorfor ikke streng som nok max bliver 100 kb (max max)
... skal det gøre betinget så hvis alle tre felter i en type ikke er udfyldt så ryger den ikke med ned til id'en? (p.t. er det kun betinget at varianten skal have et navn og at typen skal have et navn... og ikke pris samt vægt...)
forkorter lige... skal selvfølgelig også siges at selve skabelon samt validerings kontrol, append og remove funktion m.v. også kan laves kortere/evt. kombineres i et script... men det må lige blive en anden dag :D
1. Hvis man angiver en variantnavn, en typenavn og så skriver i prisfeltet så fejler den hvis man skriver ugyldige tegn. (samme med vægtfeltet hvis man udfylder prisfeltet korrekt) (fejlen er: linie 259 - regsearch.0 er null eller ikke et object
2. Hvis man blot angiver en variantnavn og ikke noget under typerne kommer den stadig med i resultatstregen (så burde den melde en fejl om at der ikke er angivet nogle typer under varianten)
3. Man kan skrive [,] og [;] i navnefelterne hvilket vel vil give en syntaxfejl i resultatstrengen?
4. Ved refresh af siden (F5) bliver resultatstregen i tekstboksen?
5. Hvis man sletter typen under en variant således den ingen typer har angivet melder den en js-fejl. (lidt som punkt 2)
Lige hvad jeg faldt over ved lidt legning med scriptet :)
hehe det er skam bare helt i orden :P må tilstå at det du har lavet indtil er langt ud over min vildeste fantasi for hvormeget hjælp man kan få herinde på exp.dk :)
kigger lige scriptet igennem igen når du melder tilbage at det er klar til det
[ hehe det er skam bare helt i orden :P må tilstå at det du har lavet indtil er langt ud over min vildeste fantasi for hvormeget hjælp man kan få herinde på exp.dk :) ] - tjah, det er måske også meget for 200 point... men kunne godt lige bruge lidt træning i jsdom så det var jo en udfordring :P - koden er dog lidt fyldig, men det bør så også gøre det lettere at tilrette i den senere...
- der er fri design i div'en med id mcfcont2 dog skal formularen have samme navnet submclfvt ellers skal det rettes i scriptet også - det samme gælder for <input type="text" name="addobjects" id="mcalcarr">...
- der er også fri design i div'en med id="mcftools" den eneste der ikke lige er "fri" design i umiddelbart er div'en med id="mcfvhold"... dog er der jo rig mulighed for css styling...
- der er selvfølgelig frit design i det hele, men det i div'en med id="mcfvhold" kan kræve tilretning i dom append skabelonen med nogle flere/andre classes, flere attributter eller anden rækkefølge...
- det hele kan du selvfølgelig også pakke ind i ydre div's eller en td i en tabel uden at det giver dig problmer :)
p.s. skal lige have slettet den dumme alert der kommer op når det er valid indhold man submitter... det er kun en test alert så du kan se indholdet der bliver postet...
15/04-2006 18:33:19 [4: checker lige op på den (anden pc. med ie, ff, opera, netscape og vender tilbage senere...] - Nåh, det var vist på tide :P virker i FF, IE, Opera, Netscape... lille bug fundet hvis man kopierer [,] og/eller [;] ind uden at bruge tastaturet (mus eller menupanel) så fjerner den ikke variablerne... kigger lige på en rettelse på det punkt
Det ser ud til at virke perfekt! Kom med det velfortjente svar :)
Hvorlænge lader du det ligge på serveren? (ville være en skam hvis det forsvandt inden jeg fik det tilpasset mit system og jeg så ikke kan hente det forfra)
Du skal virkelig have mange tak for din hjælp, havde aldrig fået lavet det så godt selv, og ja selvom du selvfølgelig kunne forøge dine kompetencer inden for DOM-programmeringen så er det meget arbejde du har lagt i det, som du skal have rigtig mange tak for - igen :D
[ Det ser ud til at virke perfekt! Kom med det velfortjente svar :) ] - Ok, her kommer det :)
[ Hvorlænge lader du det ligge på serveren? (ville være en skam hvis det forsvandt inden jeg fik det tilpasset mit system og jeg så ikke kan hente det forfra) ] Jeg sletter dem nok om et par dage... - men om kort tid poster jeg begge filer herinde... det skal man jo iflg. ekspertens regler ... så du vil jo altid kunne finde dem i denne tråd ... ;)
[ Du skal virkelig have mange tak for din hjælp, havde aldrig fået lavet det så godt selv, og ja selvom du selvfølgelig kunne forøge dine kompetencer inden for DOM-programmeringen så er det meget arbejde du har lagt i det, som du skal have rigtig mange tak for - igen :D ] - Det var så lidt ;)
<div id="mcfvhold"> <div style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px 0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div> </div> </div>
/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
function mcfvarrem(tmpn){ tnid=tmpn.replace("mcfvarrem",""); tn=document.getElementById("mcfv"+tnid); tp=document.getElementById("mcfvhold"); tp.removeChild(tn); mcfvars[tnid-1]=0; }
function mcftypeadd(tmpn){ tnid=tmpn.replace("mcftypeadd","");
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="2")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); tn2=document.getElementById("mcfspcv"+tnid[0]+"s"+tnid[1]); tp.removeChild(tn); tp.removeChild(tn2); if(tnid[1]==1){ tn=document.getElementById("mcfspcfirst"+tnid[0]); tp=document.getElementById("mcfv"+tnid[0]); tp.removeChild(tn); } } }
function mcalc(){ submitok=false; submitokoverrule=true; mcft="";
if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
function mcfchktype(tmpid,chk){ if(tmpid.indexOf("n")<0){ tmpid=tmpid.replace(/[pv]/gi,"n"); tmpid="v"+tmpid.substr(1); tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ if(chk!=0)alert("Udfyld venligst type navn først"); tn.value=""; document.getElementById(tmpid.replace("n","p")).value=""; document.getElementById(tmpid.replace("n","v")).value=""; tn.focus(); } }else{ tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ tn1=tn.id.replace("n","p"); mcfchktype(tn1,0); }else{ if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){ alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet."); tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,""); } } } }
function mcfchktypev(tmpid,chk){ if(chk==0){ regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/); if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85"); tmpid.value=""; } }else{ regsearch=tmpid.value.match(/[+-]?\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1"); tmpid.value=""; } } }
... scriptet kan forkortes har bare ikke lige tid til at flytte rundt på rodet og stille det i kompakt system p.t.... fordelen ved den lange kode er også, at det kan være lidt lettere at overskue, hvad der sker i de forskellige trin ( dårlig undskyldning :P )...
tjae men det er helt i orden... prøver at sætte mig ind i koden! kanske jeg melder tilbage med lidt spørgsmål ang. scriptet så lad lige vær med at at afmelde abonneringen :)
(det uploadede script er rettet til den nye udgave om ca. 3 min.) kør ellers evt. en erstatning af denne linje i scriptet: ( ... der var problemer med at man ikke kunne indtaste [,] men godt [;] fordi jeg havde glemt at tjekke på den også :P )
Hvis du stadig er 'tilmeldt' så havde jeg helt glemt en ret så vigtig ting:
tror ikke det er så svært (vel blot lidt tilføjelser i js-scriptet) men jeg havde helt glemt der skal skulle være et felt mere i forbindelse med pris og vægt felterne - Denne skal hedde lager og må kun indeholde taltegn uden +/-
[ Denne skal hedde lager og må kun indeholde taltegn uden +/- ] [ er det muligt at sætte ind? ] - Kigger på den om et lille stykke tid, det burde ikke være et problem...
jeg har nu haft lidt tid til at prøve at sætte det ind i mit system og er faldet over et par fejl... hvis du har tiden til det har jeg fundet nedenstående, ellers må jeg lige have oprettet et spørgsmål mere:
- Der er noget galt med tælningen af at der skal være mindst én type under hver variant - Det er muligt at slette typen lige med det samme inden man indtaster noget eller tilføjer flere typer - Hvis man derimod tilføjer en række ekstra typer inden man gør andet kan man slette de overflødende indtil man har to varianter tilbage - det burde vel skulle være én? - Der er heller ikke validering for om varianten har fået et navn før man begynder at indskrive typer under varianten
har du en mailadresse jeg kan skrive til? så kan du lige få login og se der jeg har sat det op indtil videre
Hejsa, [ - Der er noget galt med tælningen af at der skal være mindst én type under hver variant - Det er muligt at slette typen lige med det samme inden man indtaster noget eller tilføjer flere typer - Hvis man derimod tilføjer en række ekstra typer inden man gør andet kan man slette de overflødende indtil man har to varianter tilbage - det burde vel skulle være én? ] - Kan slet ikke få den til at gøre det du nævner... heller ikke selv om jeg bruger den nævnte procedure :/
[ - Der er heller ikke validering for om varianten har fået et navn før man begynder at indskrive typer under varianten ] - Den kigger jeg lige på...
[ har du en mailadresse jeg kan skrive til? så kan du lige få login og se der jeg har sat det op indtil videre ] ... Foretrækker at være anonym - har det bedst med det ... du er dog velkommen til at kaste en test fil op herinde så hvis jeg ikke kan se løsningen er der muligvis en anden der kan - det er jo styrken ved eksperten...
Du kan selvfølgelig også kaste et link til et testområde der ikke er koblet til dit system d.v.s. så det ikke poster til dit indhold ...
... piller lidt ved den validering og kaster det op igen ...
Kom lige i tanke om at du sikkert mente at du også ville have validering på at man ikke kunne skrive navnet i typen før der var angivet et i varianten... det kigger jeg lige på imorgen :) - lidt træt idag ...
Det er selvfølgelig helt i orden du foretrækker at være annonym :)
Jeg har lidt svært ved at gennemskue hvad du har ændret i koden (går ud fra det er i js-filen) Jeg har nemlig tilpasset den en del for at få det til at passe ind i mit system (størrelser, titles og lidt andet) og ville derfor gerne hvis det var muligt at tilføje ind i mit - Er det den andensidste funktion?
Ser ud til at mit første spørgsmål i 01/05-2006 16:47:44 fungere fint på din host - Har du ændret i koden, eller har jeg lavet noget forkert i min kode?
Smider lige min js-kode op i nedenstående kommentar:
mcf2a1a=document.createElement("input"); mcf2a1a.style.width="200px"; mcf2a1a.style.marginRight="3px"; mcf2a1a.title="Indtast navnet på varianten"; mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1)); mcf2a1a.setAttribute("type","text"); mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));
/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
function mcfvarrem(tmpn){ tnid=tmpn.replace("mcfvarrem",""); tn=document.getElementById("mcfv"+tnid); tp=document.getElementById("mcfvhold"); tp.removeChild(tn); mcfvars[tnid-1]=0; }
function mcftypeadd(tmpn){ tnid=tmpn.replace("mcftypeadd","");
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="2")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); tn2=document.getElementById("mcfspcv"+tnid[0]+"s"+tnid[1]); tp.removeChild(tn); tp.removeChild(tn2); if(tnid[1]==1){ tn=document.getElementById("mcfspcfirst"+tnid[0]); tp=document.getElementById("mcfv"+tnid[0]); tp.removeChild(tn); } } }
function mcalc(){ submitok=false; submitokoverrule=true; mcft="";
if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
function mcfchktype(tmpid,chk){ if(tmpid.indexOf("n")<0){ tmpid=tmpid.replace(/[pvs]/gi,"n"); tmpid="v"+tmpid.substr(1); tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ if(chk!=0)alert("Udfyld venligst type navn først"); tn.value=""; document.getElementById(tmpid.replace("n","p")).value=""; document.getElementById(tmpid.replace("n","v")).value=""; document.getElementById(tmpid.replace("n","s")).value=""; tn.focus(); } }else{ tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ tn1=tn.id.replace("n","p"); mcfchktype(tn1,0); }else{ if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){ alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet."); tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,""); } } } }
function mcfchktypev(tmpid,chk){ if(chk==0){ regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/); if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85"); tmpid.value=""; } }else if(chk==1){ regsearch=tmpid.value.match(/[+-]?\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1"); tmpid.value=""; } }else{ regsearch=tmpid.value.match(/\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre"); tmpid.value=""; } } }
[ Jeg har lidt svært ved at gennemskue hvad du har ændret i koden (går ud fra det er i js-filen) Jeg har nemlig tilpasset den en del for at få det til at passe ind i mit system (størrelser, titles og lidt andet) og ville derfor gerne hvis det var muligt at tilføje ind i mit - Er det den andensidste funktion? ]
mcf2b2a.onfocus=function(){mcfchktype(this.id,2);} // Tilføjet!!! ^ 2 stk. af disse er tilføjet
mcf2b2b / mcf2b2c / mcf2b2d.onfocus=function(){mcfchktype(this.id);} // click -> focus ^ Disse har fået rettet event fra onclick til onfocus
function mcfchktypev(tmpid,chk){ ... ^ Dette functions afsnit er blevet rettet
[ Ser ud til at mit første spørgsmål i 01/05-2006 16:47:44 fungere fint på din host - Har du ændret i koden, eller har jeg lavet noget forkert i min kode? ] ^ Testede inden jeg pillede ved koden og da brokkede den sig ikke så det må være i din tilrettede kode der ligger noget :/ ... det eneste jeg har tilføjet det er at velideringen bliver aktiveret i under felter når man bruger tab til fokussering såvel som mus - derfor onclick til onfocus og så har jeg tilføjet validering på input type navnet...
[Smider lige min js-kode op i nedenstående kommentar:] ... ok, kigger nok på det iaften ...
Du har pillet et par controlspacers ud ... regner ikke med at det har den store betydning på scriptet... men det var nogle jeg satte ind af hensyn til childnodes kontrol og margin tror jeg nok ...
Prøv evt. denne script del og tag evt. herefter rettelserne fra min js kildefil - (det der er blevet rettet i min kildefil står nævnt ovenover...)
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); // tn2=document.getElementById("mcfspcv"+tnid[0]+"s"+tnid[1]); tp.removeChild(tn); // tp.removeChild(tn2); /* if(tnid[1]==1){ tn=document.getElementById("mcfspcfirst"+tnid[0]); tp=document.getElementById("mcfv"+tnid[0]); tp.removeChild(tn); }*/ } }
Jeg har stadig ikke helt fået styr på det endnu desværre, men er rendt ind i et større problem :S
Jeg gemmer jo outputten fra din funktion og for at kunne redigere i oplysningerne bagefter skal jeg kunne genopbygge varianterne med tilhørende typer..
Jeg har fået scriptet outputtet til en array vha. php således den er bygget sådan her op:
<div class='mcfminn' id='mcfv2m'> <input type='text' id='v2n1' value='Small' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v2p1' value='-50' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v2v1' value='-100' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v2s1' value='' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v2n2' value='Medium' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v2p2' value='' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v2v2' value='' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v2s2' value='6' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v2n3' value='Large' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v2p3' value='75' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v2v3' value='250' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v2s3' value='1' style='width:50px' title='Indtast lagerstatus på typen'><br> </div> </div> </div>
Jeg har det liggende her: http://shop.epostbud.dk/admin brugernavn: anders - password: 1234 -> Under oprettelse under Produkter -> Nede i bunden hvor der står varianter... (så kan du også se min js-fil mv.)
Jeg vil meget gerne honorerer dit arbejde med 1.000,- hvis du vil hjælpe mig med at få det op og fungere 100% :)
mcf2a1a=document.createElement("input"); mcf2a1a.style.width="200px"; mcf2a1a.style.marginRight="3px"; mcf2a1a.title="Indtast navnet på varianten"; mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1)); mcf2a1a.setAttribute("type","text"); mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));
/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
function mcfvarrem(tmpn){ tnid=tmpn.replace("mcfvarrem",""); tn=document.getElementById("mcfv"+tnid); tp=document.getElementById("mcfvhold"); tp.removeChild(tn); mcfvars[tnid-1]=0; }
function mcftypeadd(tmpn){ tnid=tmpn.replace("mcftypeadd","");
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); tp.removeChild(tn); } }
function mcalc(){ submitok=false; submitokoverrule=true; mcft="";
if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
}else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){ if(chk!=0)alert("Udfyld venligst type navn først"); tn.value=""; document.getElementById(tmpid.replace("n","p")).value=""; document.getElementById(tmpid.replace("n","v")).value=""; document.getElementById(tmpid.replace("n","s")).value=""; tn.focus(); } }else{ tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ tn1=tn.id.replace("n","p"); mcfchktype(tn1,0); }else{ if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){ alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet."); tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,""); } } } }
function mcfchktypev(tmpid,chk){ if(chk==0){ regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/); if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85"); tmpid.value=""; } }else if(chk==1){ regsearch=tmpid.value.match(/[+-]?\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1"); tmpid.value=""; } }else{ regsearch=tmpid.value.match(/\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else{ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre"); tmpid.value=""; } } }
[ Hvilke variabler skal jeg manuelt indstille således at den kan bruge disse elementer selvom de ikke er sat med funktionen? ]
... Du tænker på en javascript aktiverings funktion der automatisk kan generere de eksisterende typer / varianter baseret på noget input i denne stil med en window.onload der aktiverer det script?:
... hov der er da en fejl i den beregning ... den må nok lige rettes først ... den tager åbenbart den tidligere type med i den næste type... ovenstående skulle have været [;]Sko[,]123[,]213[,]41[,]123[,]342[,]5324[,]253[,]253[;]Hat[,]342[,]2345[,]2[,]3425 ... så jeg må nok kigge på den js array sammentæller ...
[ Super det var det der skulle til ang. valideringen... Hvad så med genskabningen? ] ... Ok, det kigger jeg på senere - tror dog lige jeg skal puffe lidt til det andet javascript array sammentællings problem først?...
ja har set det med at den tager de forrige type med for hver ny type, men min php-script tager højde for dette så hvis det ikke er til skade for js-scriptet behøves du ikke kigge på det?
umiddelbart er det ikke nødvendigt med en onload-funktion i js til at skabe elementerne da jeg godt kan udskrive dem med php'en på serverside hvis det er lettere? kan bare ikke helt gennemskue hvordan det skal se ud for at kunne passe ind...
[ umiddelbart er det ikke nødvendigt med en onload-funktion i js til at skabe elementerne da jeg godt kan udskrive dem med php'en på serverside hvis det er lettere? kan bare ikke helt gennemskue hvordan det skal se ud for at kunne passe ind... ] - Kigger lige på det... p.t. tømmer scriptet jo alt det javascript kræves eller hvad der ellers står i dens div ved onload - det skal så deaktiveres og så skal man outputte html elementerne så de passer ... Jeg lægger lige scriptet over på en anden pc og leger lidt (det går dog ikke helt så hurtigt...)
Det er skam bare helt i orden :) Super du vil kigge på det igen... Det er ikke sikkert jeg svarer mere i dag, men er online igen imorgen formiddag :) Fortsat god aften...!
mcf2a1a=document.createElement("input"); mcf2a1a.style.width="200px"; mcf2a1a.style.marginRight="3px"; mcf2a1a.title="Indtast navnet på varianten"; mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1)); mcf2a1a.setAttribute("type","text"); mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));
/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
function mcfvarrem(tmpn){ tnid=tmpn.replace("mcfvarrem",""); tn=document.getElementById("mcfv"+tnid); tp=document.getElementById("mcfvhold"); tp.removeChild(tn); mcfvars[tnid-1]=0; }
function mcftypeadd(tmpn){ tnid=tmpn.replace("mcftypeadd","");
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); tp.removeChild(tn); } }
function mcalc(){ submitok=false; submitokoverrule=true; mcft="";
if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
}else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){ if(chk!=0)alert("Udfyld venligst type navn først"); tn.value=""; document.getElementById(tmpid.replace("n","p")).value=""; document.getElementById(tmpid.replace("n","v")).value=""; document.getElementById(tmpid.replace("n","s")).value=""; tn.focus(); } }else{ tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ tn1=tn.id.replace("n","p"); mcfchktype(tn1,0); }else{ if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){ alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet."); tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,""); } } } }
function mcfchktypev(tmpid,chk){ if(chk==0){ regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/); if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85"); tmpid.value=""; } }else if(chk==1){ regsearch=tmpid.value.match(/[+-]?\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1"); tmpid.value=""; } }else{ regsearch=tmpid.value.match(/\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre"); tmpid.value=""; } } }
//mcfvars=new Array(); // <- Ikke nødvendig... kun hvis det er en "tom" variant/nyt produkt mcfvars=new Array("1","1"); // <- til ,"1" for hver variant (i dette eksempel er der to da der er to varianter fra start af...
^ Bemærk i ovenstående har jeg lige kastet et array ind i scriptet lige under og fjernet den fra den fra scriptet jeg postede ovenover....
mcfvars=new Array("1","1"); skal sættes af dit server script til: mcfvars=new Array(); <- ved 0 eksisterende varianter (den viste der er deaktiveret) mcfvars=new Array("1"); <- ved 1 eksisterende variant ... o.s.v. ...
... opskriften på en variant (ved denne fremgangsmåde) med herunderliggende typer er:
kontrol starten:
<div class=mcfvar id=mcfv1> <- hvor 1 hentyper til variant nummeret <div class=mcfvbox> <input id=mcfvm1 title="Indtast navnet på varianten" style="width: 200px; margin-right: 3px" value="Hvid"> ^ - 1 i id hentyder variantnr. ... value er navnet til varianten...
<input id=mcftypeadd1 style="margin-right: 3px" type=button value="Tilføj type" onclick="mcftypeadd(this.id);"> ^ - 1 i id hentyder variantnr.
<input id=mcfvarrem1 type=button value="Fjern type" onclick="mcfvarrem(this.id);"> ^ - 1 i id hentyder variantnr.
<input class=mcfinvarr id=mcfinvarr1 type=hidden value=3> ^ - 3 i value (skjult felt) hentyder antallet af underliggende typer
</div>
<div class="mcfminn" id="mcfv1m"> ^ 1 hentyder til variant nr. dette er type holderen ... der skal ikke være 1 for hver type kun en pr. variant
... og typer
<div class="mcfmtype" id="mcfv1m1"> ^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.
<input id="v1n1" title="Indtast navnet på typen" style="margin-left: 20px; width: 200px; margin-right: 3px" value="Small" onkeyup="mcfchktype(this.id);" onfocus="mcfchktype(this.id,2);"> ^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.
<input id="v1p1" title="Indtast prisforskel på typen" style="width: 50px; margin-right: 3px" value="12" onchange="mcfchktypev(this,0);" onfocus="mcfchktype(this.id);"> ^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.
<input id="v1v1" title="Indtast vægtforskel på typen" style="width: 50px; margin-right: 3px" value="10" onchange="mcfchktypev(this,1);" onfocus="mcfchktype(this.id);"> ^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.
<input id=v1s1 title="Indtast lagerstatus på typen" style="width: 50px; margin-right: 3px" value="5"onchange="mcfchktypev(this,2);" onfocus="mcfchktype(this.id);"> ^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.
<img class="mcfvi" id="mcftyperem1nr1" height="30" alt="Fjern type" src="../_grafik/delete.gif" width="28" onclick="mcftyperem(this.id);"></div> ^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.
06/05-2006 20:03:23 <- hvis det ikke ser pænt ud (ikke står på linje når du indsætter det) så skal html-linjerne lige samles en linje så der ikke lægges mellemrum ind mellem inputs ... ombrudte den for bedre overskuelighed...
mcf2a1a=document.createElement("input"); mcf2a1a.style.width="200px"; mcf2a1a.style.marginRight="3px"; mcf2a1a.title="Indtast navnet på varianten"; mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1)); mcf2a1a.setAttribute("type","text"); mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));
/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
function mcfvarrem(tmpn){ tnid=tmpn.replace("mcfvarrem",""); tn=document.getElementById("mcfv"+tnid); tp=document.getElementById("mcfvhold"); tp.removeChild(tn); mcfvars[tnid-1]=0; }
function mcftypeadd(tmpn){ tnid=tmpn.replace("mcftypeadd","");
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); tp.removeChild(tn); } }
function mcalc(){ submitok=false; submitokoverrule=true; mcft="";
if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
}else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){ if(chk!=0)alert("Udfyld venligst type navn først"); tn.value=""; document.getElementById(tmpid.replace("n","p")).value=""; document.getElementById(tmpid.replace("n","v")).value=""; document.getElementById(tmpid.replace("n","s")).value=""; tn.focus(); } }else{ tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ tn1=tn.id.replace("n","p"); mcfchktype(tn1,0); }else{ if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){ alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet."); tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,""); } } } }
function mcfchktypev(tmpid,chk){ if(chk==0){ regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/); if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85"); tmpid.value=""; } }else if(chk==1){ regsearch=tmpid.value.match(/[+-]?\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1"); tmpid.value=""; } }else{ regsearch=tmpid.value.match(/\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre"); tmpid.value=""; } } }
function billede_add_eksisterende() { var placering = document.getElementById('eksisterende'); var div = document.getElementById('skabelon_eksisterende').cloneNode(true); div.id = div.id + '_' + (++act_eksisterende);
function billede_add_opload() { var placering = document.getElementById('opload'); var div = document.getElementById('skabelon_opload').cloneNode(true); div.id = div.id + '_' + (++act_opload);
function rabat_add() { var placering = document.getElementById('rabat'); var div = document.getElementById('skabelon_rabat').cloneNode(true); div.id = div.id + '_' + (++act_rabat);
function kat_add() { var placering = document.getElementById('kat'); var div = document.getElementById('skabelon_kat').cloneNode(true); div.id = div.id + '_' + (++act_kat);
function tilbud_add() { var placering = document.getElementById('tilbud'); var div = document.getElementById('skabelon_tilbud').cloneNode(true); div.id = div.id + '_' + (++act_tilbud);
mcf2a1a=document.createElement("input"); mcf2a1a.style.width="200px"; mcf2a1a.style.marginRight="3px"; mcf2a1a.title="Indtast navnet på varianten"; mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1)); mcf2a1a.setAttribute("type","text"); mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));
/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */ if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]); }
function mcfvarrem(tmpn){ tnid=tmpn.replace("mcfvarrem",""); tn=document.getElementById("mcfv"+tnid); tp=document.getElementById("mcfvhold"); tp.removeChild(tn); mcfvars[tnid-1]=0; }
function mcftypeadd(tmpn,mcval1,mcval2,mcval3,mcval4){
function mcftyperem(tmpn){ tnid=tmpn.replace("mcftyperem",""); tnid=tnid.split("nr"); tp=document.getElementById("mcfv"+tnid[0]+"m"); if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig."); else{ tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]); tp.removeChild(tn); } }
function mcalc(){ submitok=false; submitokoverrule=true; mcft="";
if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
}else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){ if(chk!=0)alert("Udfyld venligst type navn først"); tn.value=""; document.getElementById(tmpid.replace("n","p")).value=""; document.getElementById(tmpid.replace("n","v")).value=""; document.getElementById(tmpid.replace("n","s")).value=""; tn.focus(); } }else{ tn=document.getElementById(tmpid); if(tn.value.replace(/ * /gi,"")==""){ tn1=tn.id.replace("n","p"); mcfchktype(tn1,0); }else{ if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){ alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet."); tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,""); } } } }
function mcfchktypev(tmpid,chk){ if(chk==0){ regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/); if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85"); tmpid.value=""; } }else if(chk==1){ regsearch=tmpid.value.match(/[+-]?\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1"); tmpid.value=""; } }else{ regsearch=tmpid.value.match(/\d+/) if((regsearch)&&(regsearch[0].length==tmpid.value.length)){ //Indput godkendt }else if(tmpid.value!=""){ alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre"); tmpid.value=""; } } }
... burde virke - eller rettere virker her med min lokale test ... kan evt. poste lokal test fil også - der er dog lidt js alerts baseret på iframe editors som vist ikke er helt med i min download tror jeg nok - samt et par links til dine php post håndterings filer da det er en save fra dit link... så det er nok ikke helt ideelt...
Typisk: Så har man lige skrevet en hel smøre også gemmer eksperten det ikke :(
Ser lige om jeg kan huske det hele igen... Det ser rigtigt godt ud :) Har indsat den sidste del (hvor den selv generer felterne igen ved onload)
- Der er et problem med at en variant slettes ved submit hvis blot man har fjernet én type under den - Det er ikke muligt at angive minusbeløb til andre end den første type under hver variant - Der er kommet luft ovenover felterne (også selvom der ingen felter er) - Der kommer en alert ved submit hvis der ikke findes nogen varianter - Det skal der ikke komme da det skal være muligt at oprette produkter uden definerede varianter
Mener der var et par ting mere som jeg har glemt igen, men skal se om jeg kan komme på dem igen :D
Ellers er jeg imponeret over det kunne lade sig gøre med sådan en onload-funktion!
Du kan stadig logge ind på sitet med samme brugernavn/password og se hvordan jeg har fået det sat op (kan jo ske jeg har glemt noget)
1. Jeg kan heller ikke få den til at fejle den fejl igen - Så i første omgang glememr vi den bare lige 2. Det funger - Selvom jeg ikke helt kan gennemskue hvorfor ;-) 3. Hvis du kigger på siden så er der en ekstra <br> (eller lignende margin) ovenover felterne - De står ikke udfor teksten "Varianter" til venstre 4. Super :)
Et spørgsmål som ikke vedkommer variant-scriptet (men som dog stadig er js):
Under eksisterende billeder kan man tilføje endnu en dropdown-felt, men ved de tilføjede felter virker "luppen" ikke (billedbrowseren) - Den sender blot browseren til top via en # som den også linker til, men den burde bruge onClick'en i stedet og derved gå i en return false, men det virker ikke rigtigt :S
... uhm, 1-3 burde være ok (når vi glemmer 1 indtil videre...)
2 -> Fejlen jeg havde lavet var at den udførte kontrollen af indtastningen hver gang man trykkede på en tast ... d.v.s. den ville køre en validering lige efter man havde tastet minus tegnet ind - derfor meldte den fejl da minus alene ikke var gyldigt...
cnid og tnid??? - Hvis du tænker på regenereringen af elementerne så sørger scriptet automatisk for det hele ligesom når man opretter et nyt element... udvidelsen i scriptet sørger bare for at sætte værdierne ind samtidig med at den opretter elementerne...
[ Under eksisterende billeder kan man tilføje endnu en dropdown-felt, men ved de tilføjede felter virker "luppen" ikke (billedbrowseren) - Den sender blot browseren til top via en # som den også linker til, men den burde bruge onClick'en i stedet og derved gå i en return false, men det virker ikke rigtigt :S ] - Har ikke kigget på den ... holder lige fokus et sted ad gangen - skal nok prøve at kigge lidt på den efter at variant scriptet kører ...
if(((!submitok)&&(mcft!=""))||((!submitokoverrule)&&(mcft!=""))){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return false; }
[ Den laver ingen udregninger på php-siden den poster blot også udskriver værdierne igen, så der sker ingenting ved at du poster mod min side... ] Niks... burde den ikke - troede måske der var oprettelse af produkter...
[ Det skulle være for at den ikke "brokker" sig hvis der ingen varianter findes? ] ... det burde det være - skal lige have testet om det stadig virker hvis man f.eks. opretter et produkt og om fejl i valideringen stadig opfanges - checker lidt videre om det virker godt nok - nu da jeg ved at din php fil bare outputter og ikke opretter produkter ...
if(((!submitok)&&(mcfvars.length>0))||((!submitokoverrule)&&(mcfvars.length>0))){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else{return false;} }
if(((!submitok)&&(mcfvars.length>0))||((!submitokoverrule)&&(mcfvars.length>0))){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;} else return true; }
if(((!submitok)&&(mcfvars.length>0))||((!submitokoverrule)&&(mcfvars.length>0))) ^ mcfvars.length kontrol tilføjet ... checker om der er varianter ellers er mcfvars=0
offtopic ... (rettet onclick) virker fint i FF uden rettelsen men prøv:
produkt_opret.js -------------------- ...
function billede_add_eksisterende() { var placering = document.getElementById('eksisterende'); var div = document.getElementById('skabelon_eksisterende').cloneNode(true); div.id = div.id + '_' + (++act_eksisterende);
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.