Stopping double clicking with Perl CGI

Paul Makepeace paulm at
Thu May 22 11:06:40 BST 2008

Here's a solution that hides the button (thus it still shows up in
forms), and re-enables it after a couple of seconds.

(Change return false to return true to allow the actual submission.)

<form action="">
<input type="submit" name="action" id="onetime"
onclick="javascript:return disable();" value="Click me!" />
<div id="submitting" style="display: none">Submitting...</div>

<script type="text/javascript">
function reEnable(el_off, el_on) { = "none"; = "block";
  el_off.value = "And I'm back!";

function disable() {
  var button = document.getElementById('onetime');
  var submitting = document.getElementById('submitting');
  button.value = "And I'm spent"; = "none"; = "block"
  setTimeout(function() {reEnable(button, submitting)}, 2000); // 2s
  return false;

Not pretty, but you get the idea.

I deliberately didn't use a library because it's not necessary, and
anyone asking this level of question might want to learn some basic
ecmascript :-)


On Thu, May 22, 2008 at 10:42 AM, Smylers <Smylers at> wrote:
> Chris Jack writes:
>> What is the best way of stopping a user double clicking a button in a
>> web page created using Perl CGI?
>> It seems to me that the logical way to do it would be to disable the
>> button when it is pressed, but I haven't found an example of how to do
>> that on the web yet.
> That can be done straightforwardly with JavaScript, however:
> * It relies on JavaScript being enabled.
> * If, after submitting the form and going to the next page, the user
>  decides to go back to the form (using the browser's 'Back' button) to
>  change something and re-submit, the submit button will_still_ be
>  disabled, which rather hampers attempts to re-submit the form -- at
>  least it will in many modern browsers (Firefox 2+, Opera) which cache
>  the rendered page rather than the source HTML (Firefox 1.5-).
> * Disabling the button at time of form submission means the button is
>  no longer in the form data-set sent to the server.  This is
>  problematic if your form has multiple buttons and you want to know
>  which one the user chose.
> Smylers

More information about the mailing list