Det er nok bedre at sikre sig, der ikke sker nogen skade ved, der klikkes to gange. Har du også problemer, hvis siden opdateres efter submit? Prøv at fortælle lidt mere om, hvad det er, du laver - og hvornår/hvorfor problemerne opstår :)
Hej ole :o) Jeg har sikret mig vedr opdater så godt som jeg lige kunne finde på. Det er en længere historie med noget iframes osv. Så det er ok.
Problemet er mest ved dobbeltklik på submit knappen eller hvis folk klikker fordi de er utålmodige mens den arbejder. Så jeg tænkte om man kan lave et javascript som deaktiverer knappen i feks 8 sekunder når man trykker på den. Så kan de ikke klikke igen... :o) Bare et lille script som kan 'sættes ind i knappen'
Ja, det kan man godt - men jeg ville gerne give dig den helt rigtige løsning :) Hvis det er noget data, der skal opdateres - som her på siden - er der nemlig en anden måde at gøre det på. Her får du lige et lille script, der kan disable/enable en knap:
<form name="myForm" ....... > ... en hel masse felter ...
Nej, sådan kan du ikke referere til knappen. Referencen er tabt, når timeout'en skal til at afvikle scriptet. I stedet kan du bruge en variabel og en anonym funktion til at bevare referencen over tid: onclick="this.disabled=true;var Me=this;setTimeout(function(){Me.disabled=false}, 8000)"
På siden her, postes kommentar formen mod dokumentet 'response.php'. I formen kunne du så have et felt: <input type="hidden" name="return_page" value="<?=$_SERVER["PHP_SELF"]?">
I 'response.php' kunne der stå:
<?
/* En masse kode til at identificere brugeren og opdatere databasen, m.m. */
Header("Location: ".$_POST["return_page"]); exit;
?>
Efter DB'en er opdateret, sendes brugeren således tilbage til siden med formen og han kan trykke F5 ligeså tosset, han vil :)
Ahh, shit, det virker ik helt som det skal. Den disabler fint nok, men der bliver ikke submittet. Hvordan kan det være? Det virkede fint før. Her er det hele
<SCRIPT LANGUAGE="JavaScript" type="text/javascript"> var Dont_evaluate = false; function CheckThirdSite(){ if(Dont_evaluate){return true;} return confirm('<?php echo $lng_alert ?>'); } </script>
Så vidt jeg ved så bruger du php - så jeg vil tillade mig at være offtopic og løse problemet med php. (Jeg er ikke så glad for clientside løsninger på den type problemer).
Mit forslag: Lav et ID for hver form. Tjek om ID'et er gyldigt, før du gemmer informationerne (eller hvad du nu gør). Rent praktisk kan det gøres ret nemt.
Øverst i dit script har du en id (i session eller cookie) som du tæller op. I din form har du så det gamle id. Ved submit tester du så om tallet i formen er een mindre end den du har i session. Hvis det er, så er alt ok. Hvis det ikke er sandt, er det enten een der har pillet i formen (og rettet det gamle id) eller der mangler det gamle id. Men i langt de fleste tilfælde, bør det virke.
Ja, det må du såmænd gerne håbe på ... men der sker ikke en squid, hvis det sker. Prøv at skrive et indlæg på Eksperten og tryk derefter på 'Back' ... og ...? ;o)
... men da du har disabled din knap, bliver den ikke sendt med til serveren - så hvis du checker på den, så er det derfor, du tror, der ikke bliver sendt data med ;o)
Lav altid et skjult felt: <input type="hidden" name="contxt" value="noget">
Så kan du altid spørge på serveren:
if (isset($_POST["contxt"])) { switch ($_POST["contxt"]) { case "noget": funktion_1(); break;
case "noget_andet": funktion_2(); break;
default: // Noget, der skal ske, hvis ikke 'contxt' er 'noget' eller 'noget_andet' } }
Jeg har fundet en løsning. Inspireret af olebole Jeg skulle bare skjule knappen, ikke deaktiveret den :o)
her er det hele: <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> var button = false; function CheckThirdSite(){ if (confirm('<?php echo $lng_alert ?>')){ button.style.display="none"; return true; } else { button.style.display="inline"; return false; } } </script>
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.