If you've got some AJAX functionality inside a standard form (e.g. an address lookup feature where people type in their postcode and click a button) then there's a temptation for people to hit 'Enter' to perform the search. By default this will submit the whole form, which isn't what you want.
Catching the 'Enter' key press is fairly easy to do with some inline Javascript, but it can easily be done unobtrusively with Dojo as well:
dojo.ready( function() { dojo.connect(dojo.byId('postcode'), 'onkeydown', function(event){ if (event.keyCode == dojo.keys.ENTER) { // CALL AJAX CODE HERE dojo.stopEvent(event); } }); } );
I found that 'onkeyup' as the event doesn't work here - the code runs but doesn't prevent the submission, so stick to onkeydown.
Update: Here's the AMD (Dojo 1.7+) equivalent of the same thing:
require(['dojo/ready', 'dojo/dom', 'dojo/on', 'dojo/keys'], function(ready, dom, on, keys){ ready(function(){ on(dom.byId('postcode'), 'keydown', function(e){ if (e.keyCode == keys.ENTER) { // AJAX stuff here event.stop(e); } }); }); });
Comments
21st Apr, 2011
The keyup event always happens after the default (browser) event occurs. Only keydown and keypress can potentially intercept an event.
26th Apr, 2011
Makes sense - thanks for the tip.
18th Jul, 2012
Thanks for your tips.It's very userful
31st Mar, 2013
Reply to a really old post but Google sent me here so must still be good.
Minor correction on the AMD update. You need require 'dojo/keys' as well.
8th Apr, 2013
Thanks, I've updated the post.
Comments are closed.