Avatar billede jenslund Juniormester
17. maj 2004 - 11:28 Der 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.

Kan man det jeg søger efter? og hvordan?

vh
Jens
Avatar billede skovenborg Nybegynder
17. maj 2004 - 15:11 #1
Måske:
<script type="text/javascript">
var submitted = false;
</script>
</head>

<body onunload="if (document.forms[0].inputfelt.value != document.forms[0].inputfelt.defaultValue && submitted == false) {alert('Du har ikke gemt');}">
<form onsubmit="submitted = true;">
<input type="text" name="inputfelt" value="Standard value" />
<input type="submit" />
</form>
</body>
Avatar billede skovenborg Nybegynder
17. maj 2004 - 15:12 #2
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.
Avatar billede olebole Juniormester
17. maj 2004 - 15:21 #3
<ole>

<body onbeforeunload="if(!submitting && checkForm()) return 'Du har ikke gemt.'">

<script type="text/JavaScript">
var submitting = false;
function checkForm() {
    var changed = false;
    var f = document.myForm;
    for ( i=0; i<f.length; i++ ) {
        if ( (f.elements[i].tagName=="INPUT"&&f.elements[i].type=="text") || f.elements[i].tagName=="TEXTAREA" ) {
            if (f.elements[i].value!=f.elements[i].defaultValue) changed = true;
        }
    }
    return changed;
}
</script>

<form action="tja.html" name="myForm">
<textarea name="ib"></textarea><br>
<textarea name="kaj"></textarea><br>
<input name="ugle" type="text" value="Noget"><br>
<input name="gylp" type="text"><br>
<button type="submit" onclick="submitting=true">SEND</button>
</form>

</body>

/mvh
</bole>
Avatar billede olebole Juniormester
17. maj 2004 - 15:25 #4
... og funktionen kunne nok sexes lidt op:

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;
}
Avatar billede skovenborg Nybegynder
17. maj 2004 - 15:27 #5
ole >> hvorfor onbeforeunload. Mig bekendt er det en IE ting.
Avatar billede olebole Juniormester
17. maj 2004 - 16:52 #6
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
Avatar billede skovenborg Nybegynder
17. maj 2004 - 18:08 #7
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.
Avatar billede olebole Juniormester
17. maj 2004 - 18:36 #8
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
Avatar billede skovenborg Nybegynder
17. maj 2004 - 19:22 #9
tjaa, måske det mere fordi jeg selv er firefox-mand - og støtter jo min browser så godt jeg kan ;-)

Men jeg benægter da heller ikke at IE er langt den største og den man nok i første omgang bør få sin side til at virke i...
Avatar billede olebole Juniormester
17. maj 2004 - 23:33 #10
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*/ }"
Avatar billede jenslund Juniormester
18. maj 2004 - 10:13 #11
Hej igen

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'?

vh
Jens
Avatar billede jenslund Juniormester
18. maj 2004 - 10:16 #12
Nu ser jeg oleboles forbehold i forhold til skovenborgs løsning - jeg prøver lige oleboles

;-)
Avatar billede jenslund Juniormester
18. maj 2004 - 10:25 #13
Hej igen

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.'">

<form name=\"form\" id=\"form\" method=\"post\" action = \"matpack_create_resume.php\">
<input type=\"text\" size=\"86\" name=\"title\" value=\"$mp->title\" class=\"txtdrop\">
<textarea name=\"resume\" rows=\"10\" cols=\"85\" class=\"txtdrop\">$mp->resume</textarea>
<input type=\"submit\" name=\"submit\" value=\"Gem ændringerne\" class=\"button1\" onclick=\"submitted=true;\">

...

Det virker ikke ... hm - hva' siger I

vh
Jens
Avatar billede skovenborg Nybegynder
18. maj 2004 - 12:19 #14
prøv istedet:
<script language="javascript1.2">
var submitting = false;
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>
Avatar billede jenslund Juniormester
18. maj 2004 - 12:29 #15
nope - rettede alle submitting->submitted - for at være sikker på konsekvens

... virker sgutte :-|

Jens
Avatar billede skovenborg Nybegynder
04. juni 2004 - 15:28 #16
undskyld jeg glemte at svare tilbage :-S

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?
Avatar billede jenslund Juniormester
04. juni 2004 - 15:37 #17
Tak Skovenborg

Jeg kigger på den mandag - go weekend

Jens
Avatar billede jenslund Juniormester
10. juni 2004 - 12:41 #18
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
Avatar billede skovenborg Nybegynder
10. juni 2004 - 13:44 #19
prøv at ændre:
f = document.form til
f = document.forms[0];

Den tager så den første form på siden og checker den - så medmindre du har andre så burde det løse problemmet.
Avatar billede jenslund Juniormester
10. juni 2004 - 13:54 #20
Det er nu den anden form på sidenså jeg prøvede f = document.forms[1]; i stedet og det ser ud til det virker.

Jeg takker mange gange

Smid et svar og du får point

Venlig hilsen
Jens
Avatar billede skovenborg Nybegynder
10. juni 2004 - 14:24 #21
værsgo' - måske olebole også skulle have point!?! Hvis vi kan få ham til at svare altså ;-)
Avatar billede jenslund Juniormester
10. juni 2004 - 14:26 #22
Jeps - olebole - lad høre fra dig
Avatar billede jenslund Juniormester
10. juni 2004 - 14:28 #23
Jeg gi'r ham et par dage ;-)
Avatar billede skovenborg Nybegynder
10. juni 2004 - 14:42 #24
helt i orden - han har vist heller ikke været så aktiv i et par dage. Man har vel også lov at holde fri ;-)
Avatar billede jenslund Juniormester
10. juni 2004 - 14:46 #25
Fri!!! Slaphed, slendrian, ungdommen nu til dags - vil bare spise vandmelon og spille bongotromme - nå men - det er vel ok ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester