31. maj 2005 - 08:29Der er
38 kommentarer og 2 løsninger
checkform i en dynamisk oprettet <form>
Jeg har en dynamisk liste, hvor der genereres <form> for hver record. Jeg skal tjekke på et felt enkelt felt for kun at indeholde tal, men det vil bare ikk' - Hvad er fejlen i nedenstående: (tillægsspørgsmål: er der en smart måde at lave en alert-boks, når der indtastes andet end tal med det samme i stedet for ved submit?)
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform() { if(!document.form<%=rs("id")%>.items<%=id%>.value.match(/^[0-9]/)){ alert("Der må kun indtastes tal i bestillingsfelterne"); document.form<%=rs("id")%>.items<%=id%>.focus(); return false; } // ** End checkform ** return true; } </script> <!--- CHECKFORM SLUT --->
Derudover kan du jo altid referere til formen selv med: onsubmit="myOwnShit(this)"
- og funktionen:
function myOwnShit(f) { if (!f.item.value.match(/^[0-9]/)) { // blablabla } }
Husk, at der gerne må være flere elementer med samme name-attribut ... det er kun ID's, der skal være unikke. Derfor lader jeg somom navnet på feltet i alle formene er 'item' :)
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform() { $myRegexp = /^\d$/; if (!$myRegexp.test(document.form<%=rs("id")%>.items<%=id%>.value)) { alert("Der må kun indtastes tal i bestillingsfelterne"); document.form<%=rs("id")%>.items<%=id%>.focus(); return false; } // ** End checkform ** return true; } </script> <!--- CHECKFORM SLUT --->
Oooops ... jeg havde slet ikke set, du submitter med JS. Så duer det slet ikke at anvende onsubmit-event'en, da den ikke bliver fyret af ved JS-submit :)
Brug denne i stedet:
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform(f) { if(!f.items<%=id%>.value.match(^\d*$)) { alert("Der må kun indtastes tal i bestillingsfelterne"); f.items<%=id%>.focus(); return false; } // ** End checkform ** return true; } </script> <!--- CHECKFORM SLUT --->
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform(inx) { var inp = document.forms["form"+inx].elements["items"+inx]; if(!inp.value.match(^\d*$)) { alert("Der må kun indtastes tal i bestillingsfelterne"); inp.focus(); return false; } // ** End checkform ** return true; } </script> <!--- CHECKFORM SLUT --->
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform(inx) { var inp = document.forms["form"+inx].elements["items"+inx]; if(!inp.value.match(^\d*$)) { alert("Der må kun indtastes tal i bestillingsfelterne"); inp.focus(); return false; } // ** End checkform ** document.forms["form"+inx].submit(); } </script> <!--- CHECKFORM SLUT --->
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform(inx) { var inp = document.forms["form"+inx].elements["items"+inx]; if(!inp.value.match(^\d*$)) { alert("Der må kun indtastes tal i bestillingsfelterne"); inp.focus(); return false; } // ** End checkform ** document.forms["form"+inx].submit(); } </script> <!--- CHECKFORM SLUT --->
Hvis rs("id") indeholder et tal, vil koden virke, som den er. Er det en streng, skal du huske gåseøjne i kaldet: onclick="checkform('<%=rs("id")%>');return false">
yups ... som jeg skrev tidligere, fyres onsubmit-handler'en aldrig af, når en form submittes via JS :)
Desuden vil alle funktionerne jo overskrive hinanden, da de har samme navn. Har du 10 fuktioner med navnet 'checkform', vil kun den sidste blive kaldt, ligegyldig hvilken form, der kalder. Det noget skidt, hvis funktionerne har referencer til specifikke forms og elementer ;o)
<!---CHECKFORM----> <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> function checkform(inx) { var inp = document.forms["form"+inx].elements["items"+inx]; if(!inp.value.match(^\d*$)) { alert("Der må kun indtastes tal i bestillingsfelterne"); inp.focus(); return false; } // ** End checkform ** document.forms["form"+inx].submit(); } </script> <!--- CHECKFORM SLUT --->
<!--- form ---> <form name="form20" action="frontpage.asp?SubDir=Webshop&Side=add.asp&a_id=20" method="post"> <input type="text" name="items20" size="2" value="1"> <input type="hidden" name="preis20" value="20,5"> <input type="hidden" name="nr20" value="1221"> <input type="hidden" name="bez20" value="Star Trek Nemesis DVD"> <a class="text" href="#" onclick="checkform(20);return false"><img border=0 src="webshop/pics/AddBasket.gif" width=100px height=17px align="middle" alt="Læg dette produkt i indkøbsvognen"></a> </form> <!--- FORM SLUT --->
Dem kommer der så flere af i løkkken, men med ændret id
nielle >> God idé, som desværre ikke virker. Som jeg skrev tidligere: "Et form-element (men kun et form-element ... ikke f.eks. et link i formen) kan altid referere til formen med 'this.form'" - så deeeeeeeet ...... :)
- men jeg er enig i, at det er lidt overkill at give felterne nummererede navnene. Du er dog nødt til at lave en reference til formen, når denne skal submittes ;o)
Nuvel, men så er denne nok endnu lettere: <input type="image" src="webshop/pics/AddBasket.gif" title="<%=s_add_product%>">
- og så kan man igen køre valideringen på onsubmit. Det er ikke fordi, jeg sidder og venter på at kunne rette dig, nielle - selvom jeg godt kan se, det begynder at ligne et mønster :) Jeg håber dog, du tager det fra den positive side og suger lidt til dig. Der er jo ikke spor i vejen med din løsning - koden bliver bare en smule mindre ;o)
PS: Der er lige et par ting, man skal være opmærksom på ved type="image":
1. Elementet hører ikke som sådan med til formen. Det kan således ikke referere til 'sin' form med 'this.form'. 2. Giver man elementet en name-attribut (f.eks: name="gnu"), kan denne ikke findes på serveren. Det kan derimod variablerne 'gnu_x' og 'gnu_y', der indeholder koordinaterne for brugerens klik ... hvilket jo kan bruges til mange sjove ting (klik på et kort er kun én anvendelses mulighed)
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.