webForumDet fria alternativet

"Vill du spara?"

Webbutveckling

12 svar · 615 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Jag har en webbapplikation där användaren fyller i en massa information i ett formulär. För att användaren inte skall glömma att spara sina ändringar, när han lämnar sidan, vill jag få upp frågan:
"Du har ändrat informationen på sidan, vill du spara?"
Jag vill ju bara få upp frågan när användaren verkligen ändrat på informationen.

I dagsläget har jag onkeydown, onclick, onchange (beroende på element-typ) på alla formulärelement och sedan en JS-variabel som håller reda på om något ändrats.

Finns det något enklare, smartare sätt?

Medlem sedan juni 20034 013 inlägg
#2

Den spontana tanken är att när sidan laddas spara allt innehåll i javaskriptvariabler och sen när användaren lämnar sidan jämföra dessa med vad som då står i formuläret för att på så vis se om något verkligen är ändrat och att man inte bara klickat lite fram och tillbaka.

Medlem sedan feb. 200112 078 inlägg
#3

Ja, typ slänga in all data (servernside), hasha den (om man nu kan hasha med t.ex. MD5 i JavaScript sen för att jämföra) och kasta ut den i en JS-variabel som jämförs med en annan JS-variabel som innehåller formulärdatat (clientside).

Medlem sedan okt. 20005 273 inlägg
#4

Vad händer om man har js avslaget?

mv icaaq

Medlem sedan nov. 200013 890 inlägg
#5

Era förslag låter intressant. Jag är lite rädd för att lagra hela formuläret bara eftersom det kan bli ganska mycket info. Fördelen med det system jag använder idag är att jag inte behöver lagra någon information. Problemet är att det är lätt att missa onkeydown på något element.

icaaq skrev:

Vad händer om man har js avslaget?

I just det här fallet är det ingen fara. Det är en företagsintern applikation där alla har samma datorkonfiguration.

Medlem sedan okt. 20005 273 inlägg
#6

varför inte spara ändringen via ajax på onblur?

mv icaaq

Medlem sedan maj 200010 687 inlägg
#7

Det finns ju defaultValue, defaultSelected m.m. att läsa av på input fält.
Bara loopa igenom alla fält och kolla om de ändrats. Fina med det är att om man återställer vad det ursprungliga var så ses inte formuläret som ändrat.

Ett sätt att inte missa någon onkeydown/onchange är att binda eventsen genom att loppa igenom elementen i formuläret och binda onkeyup, onchange, onclick beroende på element-typen.

Och sen kapslar man in detta i en snygg JavaScript-klass. Eller så kanske jag kan va snäll och ge dig en klass som hanterar just detta... ;)

Medlem sedan okt. 20005 273 inlägg
#8

Vi vill också se ;)

mv icaaq

Medlem sedan maj 200010 687 inlägg
#9

Här är en klass för att hantera formulärändringar. Finns med en exempelfil där.
Schysst klass. Lite dåligt kommenterad bara...

Medlem sedan okt. 20005 273 inlägg
#10

Erik Juhlin skrev:

Här är en klass för att hantera formulärändringar. Finns med en exempelfil där.
Schysst klass. Lite dåligt kommenterad bara...

Du menar inte kommenterad alls ;)

mv icaaq

Medlem sedan maj 200010 687 inlägg
#11

Exakt... :)

Medlem sedan feb. 20041 816 inlägg
#12

Erik Juhlin skrev:

Här är en klass för att hantera formulärändringar. Finns med en exempelfil där.
Schysst klass. Lite dåligt kommenterad bara...

Har inte testat det ännu men det ser riktigt bra ut. Tack för att du delar med dig! :D

Medlem sedan nov. 200013 890 inlägg
#13

Erik Juhlin skrev:

Här är en klass för att hantera formulärändringar. Finns med en exempelfil där.

Det ser intressant ut men jag får nog kolla på det till ett annat projekt.
Lösningen som jag har idag fungerar ganska tillfredsställande och är dessutom bara runt 20 JS-rader istället för 400. ;)

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)