19. november 2004 - 11:27Der er
21 kommentarer og 1 løsning
Valider felter
Hejsa.
Jeg kunne godt tænke mig en funktion der sammenligner et vilkårligt antal inputfelter med en oprindelig værdi. Hvis der er ændringer i værdierne skal der fremkomme en ja/nej boks om at fortsætte.
<script type="text/javascript"> function compareFields(frm, fields1, fields2) { old_field = fields1.split(','); new_field = fields2.split(','); for (i=0;i<new_field.length;i++) { if (frm[old_field[i]].value != frm[new_field[i]].value) { return confirm("Nogle felter er blevet ændret - vil du fortsætte?"); } } } </script>
problemet er følgende: når jeg kommer ind på siden kan f.eks. q_type være lig teksten "radiochoise" eller "checkchoise". Men når jeg klikker på den dersens radiobutton udfor feks. q_type=checkchoise så er værdien på q_type ikke "checkchoise" men om checked. Så jeg kan ikke se jeg kan sammenligne de 2 værdier.
Det jeg evt. kunne checke på inden jeg sætter en hidden værdi var om den var lig med "sig selv" så kunne jeg sætte q_1 = checked. Men hvilken er det så jeg har checked. "radiochoise" eller en af de andre.. arg.. driving me nutta..
som jeg lige tænker... og det gør jeg jo.. så skulle man lave en funktion der kører onbodyload som - afhængig af input typen - sætter den aktuelle værdi i "old_value". Onsubmit skal samle de aktuelle status og sammenligne med "old_values".
var arrFelter = new Array("felt1"); var arrRadioFelter = new Array("felt4"); var arrCheckboxFelter = new Array("felt5"); function Valider_Felter(f){ dataChanged = false; for (i=0;i<arrFelter.length;i++){ thisFelt = f[arrFelter]; if (thisFelt.value != thisFelt.defaultValue) dataChanged = true; } for (i=0;i<arrCheckboxFelter.length;i++){ thisFelt = f[arrCheckboxFelter]; if (thisFelt.checked != thisFelt.defaultChecked) dataChanged = true; } for (i=0;i<arrRadioFelter.length;i++){ thisFelt = f[arrRadioFelter]; for (n=0;n<thisFelt.length;n++){ if (thisFelt[n].checked != thisFelt[n].defaultChecked) dataChanged = true; } } alert(dataChanged) }
Du skal altså lave tre Arrays, et med radiofelter, et med checkboxes og et med textareas, text, og password
Og de tre arrays skal være der, i den udstrækning du skal have valideret alle tre felttyper. Du skal indskrive felternes name, med komma imellem. Kun felter der sår listet i et af disse tre arrays bliver valideret for "Data changed":
var arrFelter = new Array("felt1", "felt2"); var arrRadioFelter = new Array("felt4", "felt3"); var arrCheckboxFelter = new Array("felt5", "felt6", "felt7"); function Valider_Felter(f){ dataChanged = false; for (i=0;i<arrFelter.length;i++){ thisFelt = f[arrFelter]; if (thisFelt.value != thisFelt.defaultValue) dataChanged = true; } for (i=0;i<arrCheckboxFelter.length;i++){ thisFelt = f[arrCheckboxFelter]; if (thisFelt.checked != thisFelt.defaultChecked) dataChanged = true; } for (i=0;i<arrRadioFelter.length;i++){ thisFelt = f[arrRadioFelter]; for (n=0;n<thisFelt.length;n++){ if (thisFelt[n].checked != thisFelt[n].defaultChecked) dataChanged = true; } } if (dataChanged) return (confirm("Data ændret, ok?")); return true; //alert(dataChanged) }
Det lader til at den kun kører det første array igennem..
var arrFelter = new Array("question"); var arrRadioFelter = new Array("q_type"); var arrCheckboxFelter = new Array("comment_check", "extraoption"); function Valider_Felter(f) { dataChanged = false; for (i=0;i<arrFelter.length;i++) { thisFelt = f[arrFelter]; if (thisFelt.value != thisFelt.defaultValue) dataChanged = true; } for (i=0;i<arrCheckboxFelter.length;i++) { thisFelt = f[arrCheckboxFelter]; if (thisFelt.checked != thisFelt.defaultChecked) dataChanged = true; } for (i=0;i<arrRadioFelter.length;i++) { thisFelt = f[arrRadioFelter]; for (n=0;n<thisFelt.length;n++) { if (thisFelt[n].checked != thisFelt[n].defaultChecked) dataChanged = true; } } if (dataChanged) return (confirm("Data ændret, ok?")); return true; //alert(dataChanged) }
Hvis jeg smider en alert ("D:" + arrCheckboxFelter.length); ind så fortæller den mig at arrayet er 2 langt. Men der kommer ikke nogen "Data ændre, ok?" frem..
Super. Du skal lige checkke med andre browsere, men javascriptet er indenfor normale standarder, så det skulle virke ...
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.