Avatar billede joeblack Nybegynder
04. juni 2009 - 09:26 Der er 12 kommentarer og
1 løsning

Hjælp ! - Hvad gør jeg, når brugeren bruger "tilbage"-knappen ?

Hej Eksperter !

Jeg har et lille script:

function toggleStatus()
{
var arguments = toggleStatus.arguments;
  for (var i = 0; i < arguments.length; i++)
    {
    createinspection.all(arguments[i]).disabled=!(createinspection.all(arguments[i]).disabled);
    }
}

...som jeg bruger til at hhv disable/ikke disable en række <select>'s, når brugeren klikker på en checkbox. Det virker fint.
Nogle af <select>'ne er kodet med "disabled='disabled'" og andre er ikke, og scriptet toggler mellem at disable dem der ikke er disabled og omvendt.

Problemet er, at når brugeren har submittet formen, set resultatet af sine indtastninger og derefter bruger "tilbage"-knappen, så er brugerens eventuelle klik på checkboxen glemt og <select>'s er hhv "disabled" og "ikke disabled" som var det første gang siden blev loaded. Det dur jo selvfølgelig ikke. Så hvad gør jeg, for at siden <select>'s er som brugeren har klikket sig frem til, når de returnerer til siden ?

Jeg ved ikke, om udfordringens beskrivelse giver mening - ellers må I lige sige til !
Avatar billede jinoh Nybegynder
04. juni 2009 - 09:49 #1
<script>
var workIsDone = false;

window.onbeforeunload = confirmBrowseAway;

function confirmBrowseAway()
{
  if (!workIsDone) {
    return "Are you sure you want to do that? If you leave this page " +
    "now, your work will NOT be saved!";
  }
}

function fileMyTaxes()
{
  // The user has finished their work, so we don't
  // need a warning anymore!
  workIsDone = true;
}
</script>

Brug denne kode - den vil give dem en advarsel som de så skal "confirme" :)
Avatar billede joeblack Nybegynder
04. juni 2009 - 10:07 #2
Hej Jinoh

- og tak for dit bud. Jeg kan dog ikke lige se, hvordan det løser min udfordring.

Problemet kan ses her: www.toftnet.dk/test/test.asp

Prøv at vælge klik på checkboxen, vælg noget i de nederste selects, submit formen og klik "Tilbage til test". Så er de nederste selects igen disabled...
Avatar billede jinoh Nybegynder
04. juni 2009 - 10:12 #3
I så fald kan du så ikke forklare dit problem ??

Fordi den ovenstående kode bremser det, som jeg troede var dit problem: at brugerne trykkede på "tilbage" efter at de har trykke submit og derved nulstiller "testen".

Og formen virker ikke i min browser, Firefox 3? Jeg kan stadigvæk ikke trykke på de nederste SELECTS
Avatar billede joeblack Nybegynder
04. juni 2009 - 10:22 #4
Sorry, formen er optimeret til IE, som alle brugerne bruger.

Sagen er, at brugerne _gerne_ må taste lidt i formen, se resultatet og så vende tilbage til formen. Der er _rigtig_ mange felter i formen, så derfor bruger jeg "history.back()" til at returnere til formen.
Så problemet er, at de selects, som jeg initialt sætter til disabled, er det igen, når brugeren vender tilbage til formen - på trods af, at de eventuelt har klikket på checkboxen og fjernet "disablingen"...
Avatar billede jinoh Nybegynder
04. juni 2009 - 10:38 #5
Kan dette være en løsning? Jeg er ikke særlig god til ASP - 99,99% på bar bund i dette sprog, men fandt noget, der minder lidt om dit problem? Eller må du uddybe lidt mere:

http://www.codetoad.com/asp.net/aspnetcontrols12.asp :D
Avatar billede joeblack Nybegynder
04. juni 2009 - 10:44 #6
Hmm, ikke rigtig. Det er ASP.NET...
Avatar billede jinoh Nybegynder
04. juni 2009 - 10:45 #7
Pokkers... på'en igen! :D
Avatar billede jinoh Nybegynder
04. juni 2009 - 10:56 #8
Jeg kan desværre ikke lige finde noget, der passer 100% med det du mangler - sorry for at have givet dig falske forhåbninger!

Mit råd (jaja, der er faktisk et :P ), og det er faktisk den eneste løsning, jeg lige kan komme på, er at gemme value i en database (MSSQL?) og lade den hente informationen der :)
Avatar billede joeblack Nybegynder
04. juni 2009 - 11:20 #9
Helt ok - jeg må håbe, at der er andre derude, der kan bidrage til en løsning :-)

Tak for forsøget !
Avatar billede mclemens Nybegynder
04. juni 2009 - 11:48 #10
window.onload=function(){var elm=document.getElementsByName("checkbox1")[0];if(!elm.checked)elm.onclick();}
Avatar billede mclemens Nybegynder
04. juni 2009 - 11:51 #11
Ups, ombrudt tekst

window.onload=function(){
  var elm=document.getElementsByName("checkbox1")[0];
  if(!elm.checked)elm.onclick();
}
Avatar billede mclemens Nybegynder
04. juni 2009 - 12:27 #12
Hmm, du kunne også sige:

function toggleStatus(){

  var tmp=createinspection.checkbox1.checked;
  var arguments = ['select1',!tmp,'select2',tmp,'select3',tmp];

  for (var i = 0; i < arguments.length; i+=2)
    {
    createinspection[arguments[i]].disabled=arguments[i+1];
    }
}

window.onload=function(){toggleStatus();}

...

    <input type="checkbox" name="checkbox1" checked="checked" onClick="toggleStatus()" >
Avatar billede mclemens Nybegynder
04. juni 2009 - 12:30 #13
Evt. togglestatus forkortet ned til:

function toggleStatus(){
  var tmp=createinspection.checkbox1.checked;
  for (var i=1;i<4;i++){
    createinspection["select"+i].disabled=i>1?tmp:!tmp;
  }
}
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