Avatar billede tniels Nybegynder
20. juli 2007 - 10:21 Der er 11 kommentarer

Skjul knappen, før ajax-funktionen kører

Jeg har lavet en formular, der skal gemme noget data i en database via Ajax. Jeg har lavet en input-button, hvor jeg starter en funktion, der laver arbejdet. Det hele fungerer fint, men for at forhindre at brugeren kan trykke flere gange på knappen, og vil derfor gerne disable knappen, så snart der er trykket på den, og det kan jeg ikke rigtigt få til at fungere.
Hvis jeg gør det som vist nedenfor, bliver knappen først disablet, når ajax-funktionen er kør.

    function gemSkema(navn, email, afdeling)
    {
        document.getElementById('skema_button_gemskema').disabled=true;

        gemtskemaid = layout_controls_skema.GemSkema(navn, email, afdeling).value;
    }

Er der nogen måde man kan gøre, så første linje bliver afviklet, og anden linje først bliver afviklet, når knappen er skjult?
Avatar billede olebole Juniormester
20. juli 2007 - 11:39 #1
<ole>

Første linje bliver med højglansforkromet statsgaranti afviklet før den næste  =)

/mvh
</bole>
Avatar billede olebole Juniormester
20. juli 2007 - 11:40 #2
- og da vi ikke ved, hvad der iøvrigt sker, er det jo ret umuligt at anvise, hvad du skal gøre  ;o)
Avatar billede tniels Nybegynder
20. juli 2007 - 11:47 #3
Hej Ole

Ja, jeg ved godt, at den bliver akviklet først, men selv handlingen er ikke synlig (i IE), før Ajax-funktionen er udført.
Derfor er mit spørgsmål, og jeg kan sætte noget ind mellem linjerne, så jeg er sikker på, at handlingen er synlig i browseren, inden den går videre med næste linje.
Avatar billede olebole Juniormester
20. juli 2007 - 11:56 #4
Ja, du kan rette fejlen, der giver problemet. Et AJAX kald kan ikke fryse den slags rendering, så du må begå én eller anden fejl et sted ... AJAX er jo netop asynkron  =)
Avatar billede mclemens Nybegynder
20. juli 2007 - 14:41 #5
Kan heller ikke se nogen fejl i det viste, men vil det hjælpe med nedenstående ?

if(document.getElementById('skema_button_gemskema').disabled=true)gemtskemaid = layout_controls_skema.GemSkema(navn, email, afdeling).value;

Så burde gemtskemaid = ...
... slet ikke køres før den anden returnerer true (er udført).
Selvom første linje p.t. alligevel burde køres først, som Ole siger.
Avatar billede olebole Juniormester
20. juli 2007 - 16:11 #6
Prøv at lægge et link til dokumentet  ;o)
Avatar billede madsleejensen Nybegynder
20. juli 2007 - 20:51 #7
du ikke kommet til at sætte din open() til async true vel?
Avatar billede olebole Juniormester
21. juli 2007 - 21:11 #8
- alt andet end usandsynligt  =)
Avatar billede thesurfer Nybegynder
01. august 2007 - 00:45 #9
mclemens> Hmm.. man kan vel ikke bruge IF sætningen i 20/07-2007 14:41:58 til noget, da AJAX funktionen så overhovedet ikke vil blive afviklet, hvis den ikke får disablet knappe? Eller er det bare mig der tænker forkert her..?

Alternativet er vel at bruge setTimtout til AJAX funktionen, til f.eks. 100 ms..

100 ms burde være rigeligt til at disable en knap.. :-)
Avatar billede thesurfer Nybegynder
01. august 2007 - 00:45 #10
Rettelse: setTimeout
Avatar billede mclemens Nybegynder
01. august 2007 - 08:27 #11
Mit forslag gik netop ud på at lave ajax funktionen betinget af at
knappen kunne deaktiveres - så jeg var sikker på, at ajax ikke kørte
før efter knappen var disabled. Jeg kan ikke lige se en årsag til, at den
ikke skulle kunne deaktiveres ... medmindre knappen ikke er på siden, men
det ville jo resultere i en script fejl med den nuværende opbygning, så
jeg tror ikke kaldet til gemSkema sker andre steder end hvor knappen er.

...

Har du sat id="skema_button_gemskema" på knappen ? Har ikke testet om hvorvidt
name alene på knappen gør at afviklingen af disablingen sker langsommere i IE.
( IE forstår jo ikke så godt forskel på name og id, derfor ?'et om manglende id )
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