17. maj 2004 - 11:28Der er
24 kommentarer og 1 løsning
Husk 'Ok' ved input
Hej rødder
Jeg har et website, hvor man som bruger via et inputfelt kan oprette/ændre nogle database-felter (PHP/mysql).
Nu er jeg så blevet spurgt om man kan lave en funktion, hvor der popper en alert op, hvis man har ændret noget i inputfeltet OG har glemt at gemme det ved tryk 'Ok' (submit) OG hvis man prøver at navigere væk fra siden.
Der er en topmenu, breadcrumbs samt diverse knapper på siden, så der en del steder funktionalitaten skal virke.
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
eller: <body onunload="if (document.forms[0].inputfelt.value != document.forms[0].inputfelt.defaultValue && submitted == false) {if(confirm('Du har ikke gemt dine ændringer. Gem nu i stedet?')) {document.forms[0].submit();}}">
Hvis brugeren skal have lov at gemme før han går ud.
function checkForm() { var e, f, changed = false; f = document.myForm; for ( i=0; i<f.length; i++ ) { e = f.elements[i]; if ( (e.tagName=="INPUT"&&e.type=="text") || e.tagName=="TEXTAREA" ) { if (e.value!=e.defaultValue) changed = true; } } return changed; }
Nuvel ... du kan være heldig, din virker Moz - men så er den skid også slået :) onunload-eventen fyres af på et så sent tidspunkt at du ikke kan nå at afvikle noget særligt. IE submitter ikke formen med dit eksempel - og det gør Opera heller ikke. Så er det trods alt bedre, at det virker i 98% af browserne på nettet ;o) /mvh
hmm, det kan du have ret i - havde ikke testet det i IE. Og så vigtig er den vel heller ikke - selvom jeg ikke helt ved om jeg skal stole på de undersøgelser med browser-andele.
Jo, det er den faktisk. Det er muligt, de andre til sammen er kommet op på 3% ... men så er det heller ikke mere :)
I øvrigt skal onunload-event'en først fyres af, når dokumentet forlader browseren - og så er det jo for sent at submitte en form i dokumentet. At det virker i Moz, må anses som en bug ... og den slags skal man aldrig basere sin kode på ;o) /mvh
Jamen, det er så sandelig heller ikke fordi, jeg ligger i med MS - men jeg lever jo også i en virkelighed, jeg må foholde mig til :) For Moz'erne kunne man jo lave noget: onunload="if(!window.onbeforeunload){ /*Gør noget her*/ }"
Nu har jeg prøvet lidt med skovenborgs løsning og ændret min <body>-tag til følgende:
<body topmargin="0" leftmargin="0" onunload="if (document.form.resume.value!=document.form.resume.defaultValue && submitted==false) {if(confirm('Du har ikke gemt dine ændringer. Gem nu i stedet?')) {document.form.submit();}}">
og det virker ikke (name på formen ER 'form') - hvis jeg fjerne alt andet en 'submitted==false' i betingelsen virker det for så vidt at jeg ved videre navigering bliver spurgt om jeg vil gemme. MEN den gemmer ikke når jeg sige ja.
Så jeg må have en fjel i; document.form.resume.value!=document.form.resume.defaultValue ... eller hva'?
nu har jeg copy/pasted oleboles ind; ... <script language="javascript1.2">
function checkForm() { var e, f, changed = false; f = document.form; for ( i=0; i<f.length; i++ ) { e = f.elements[i]; if ( (e.tagName=="input"&&e.type=="text") || e.tagName=="textarea" ) { if (e.value!=e.defaultValue) changed = true; } } return changed; }
</script>
...
<body topmargin="0" leftmargin="0" onbeforeunload="if(!submitting && checkForm()) return 'Du har ikke gemt.'">
Ser din funktion nogenlunde sådan her ud nu: var submitted = false; function checkForm() { var e, f, changed = false; f = document.form; for ( i=0; i<f.length; i++ ) { e = f.elements[i]; if (e.type=="text" || e.type=="textarea" ) { if (e.value!=e.defaultValue) changed = true; } } return changed; }
og skriver du: onbeforeunload="if(!submitted && checkForm()) return 'Du har ikke gemt.'" i bodyen og onclick=\"submitted=true;\"> nede ved submitknappen?
Nu har jeg prøvet Skovenborgs løsning - det virker ikke ... linket åbner uden at fortælle mig at der ændringer og uden at give mig mulighed for at gemme dem
Fri!!! Slaphed, slendrian, ungdommen nu til dags - vil bare spise vandmelon og spille bongotromme - nå men - det er vel ok ;-)
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.