Avatar billede jobless Nybegynder
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
Avatar billede nute Nybegynder
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
Avatar billede thesurfer Nybegynder
28. januar 2004 - 13:50 #2
Det skal lige siges at "onbeforeunload" kun virker i Internet Explorer.
Avatar billede jobless Nybegynder
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...
Avatar billede jobless Nybegynder
28. januar 2004 - 13:52 #4
Kravet er i forvejen IE5.5+ til systemet hvor det skal bruges.
Avatar billede nute Nybegynder
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
Avatar billede jobless Nybegynder
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 ?
Avatar billede nute Nybegynder
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
Avatar billede jobless Nybegynder
28. januar 2004 - 15:48 #8
Jeg forstår princippet, vil lige teste det senere på ugen.
Avatar billede jobless Nybegynder
06. oktober 2004 - 12:14 #9
Læg lige et svar...
Avatar billede nute Nybegynder
06. oktober 2004 - 12:33 #10
det var en lang uge ;-)
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