28. januar 2004 - 13:09
Der er
9 kommentarer og 1 løsning
Event: Ændring af form
Hej. Findes der en event som kører når en formular ændres, uden at man skal sammenligne alle felter med en streng ? Jeg skal bruge det til at dpørge brugeren om formen skal submittes, når brugeren forlader siden (hvis han/hun har glemt at submitte). MVH JoBless
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
28. januar 2004 - 13:32
#1
hmm... det er ikke nogle events der ligger på <form> til at håndtere dette, men du kan lave et lille 'hack' for at få det til. Du lægger til en attribut på dit <form/> tag, der hedder fx. 'dirty'. når du ændrer i et felt i dit formular, så ændrer du værdien i denne attribute, og når brugeren forlader siden, kan du tjekke denne attribut for at se om noget er ændret: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Untitled</title> <script language="JavaScript" type="text/javascript"> <!-- function setDirty() { document.getElementById( "frm" ).setAttribute( "isDirty", "true" ); alert( document.getElementById( "frm" ).getAttribute( "isDirty" ) ); } function checkForSubmit() { if( document.getElementById( "frm" ).getAttribute( "isDirty" ) == "true" ) { alert( "noget er ændret" ); } } //--> </script> </head> <body onbeforeunload="checkForSubmit();"> <form id="frm" isDirty="false"> <input type="text" id="txt" onchange="setDirty();"><br> </form> </body> </html> /nute
28. januar 2004 - 13:50
#2
Det skal lige siges at "onbeforeunload" kun virker i Internet Explorer.
28. januar 2004 - 13:51
#3
Ja, det er en mulighed, men dette kræver at jeg sætter en hændelse på alle felter i min formular. Alternativt kunne jeg lave noget med keypress el.lign. på min form. Jeg vil gerne ud over at skulle sætte en hændelse på samtlige felter i min form, som giver et stort arbejde + ekstraarbejde ved ændring af siden...
28. januar 2004 - 13:52
#4
Kravet er i forvejen IE5.5+ til systemet hvor det skal bruges.
28. januar 2004 - 14:03
#5
thesurfer >> true ... jobless >> du kan lave en loop der gennemløber alle dine felt på siden efter at siden er lastet: <body onload="setEvent()"> derefter laver du scriptet: function setEvent() { for( i=0; i<document.forms[0].elements.length; i++ ) { document.forms[0].elements[i].onchange = setDirty } } Sådan: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Untitled</title> <script language="JavaScript" type="text/javascript"> <!-- function setDirty() { document.getElementById( "frm" ).setAttribute( "isDirty", "true" ); } function checkForSubmit() { if( document.getElementById( "frm" ).getAttribute( "isDirty" ) == "true" ) { alert( "noget er ændret" ); } } function setEvent() { for( i=0; i<document.forms[0].elements.length; i++ ) { // Her skal alle formelementer lægges til der har eventet 'onchange' if( document.forms[0].elements[i].type == "text" ) { document.forms[0].elements[i].onchange = setDirty } } } //--> </script> </head> <body onload="setEvent()" onbeforeunload="checkForSubmit();"> <form id="frm" isDirty="false"> <input type="text" id="txt"><br> </form> </body> </html> /nute
28. januar 2004 - 14:47
#6
Det ser faktisk fornuftigt ud.... vil lige teste det senere. Er der en måde at fange det link brugeren forsøger at tilgå, således at jeg efter submit kan sende brugeren dertil ?
28. januar 2004 - 14:57
#7
hmm ... du kan jo lade alle links gå igennem et "filter" ? <a href="java script:void(0);" onclick="jumpToPage( 'dinside.htm' );">Klik</a> derefter functionen: function jumpToPage( strPage ) { if( [noget er ændret] ) { document.forms[0].target = strPage; document.forms[0].submit(); } else { document.location.href = strPage; } } PS! dette er ikke testet, men jeg håber du forstår princippet ;-) /nute
28. januar 2004 - 15:48
#8
Jeg forstår princippet, vil lige teste det senere på ugen.
06. oktober 2004 - 12:14
#9
Læg lige et svar...
06. oktober 2004 - 12:33
#10
det var en lang uge ;-)
Vi tilbyder markedets bedste kurser inden for webudvikling