Stopping double clicking with Perl CGI

David Dorward david at dorward.me.uk
Thu May 22 10:49:51 BST 2008


On 22 May 2008, at 10:17, Chris Jack wrote:

> I thought I'd be a disruptive element in the group and ask a Perl  
> question.
>
> What is the best way of stopping a user double clicking a button in  
> a web page created using Perl CGI?

Since Perl (via CGI) runs on the server, it can't stop the user  
clicking multiple times. You need something which runs in the browser,  
which means JavaScript.

Now you could do something along the lines of:

YAHOO.util.Event.addListener("myForm", "submit", function(e){
	console.log(this);
	if (this.submitted) {
		// That's a bad class name used here to make it clear what it does.
  		// You should use a better one in your code
		YAHOO.util.Event.preventDefault(e);
		return false;
	}
	this.elements['mySubmitButton'].className = 'dimmed-submit-button- 
styling';
	this.submitted = true;
});

(I use a library. It saves me effort. http://developer.yahoo.com/yui/event/ 
  )

However, this results in the situation where, due to the wonders of  
networks, the browser might not manage to send its request or get a  
response back properly leaving the user with a dead form (not often,  
but it is annoying when it happens).

As Smylers pointed it, it also screws up the back button.

If you go down this route you should probably add a timer to turn it  
back on if it looks like it failed, and an onDOMReady event to turn it  
back on when the user hits the back button.

A  better solution would probably be to examine the data on the server  
and ignore duplicate submissions (or treat them as updates).

-- 
David Dorward
http://dorward.me.uk/
http://blog.dorward.me.uk/




More information about the london.pm mailing list