The best solution I could come up with is a form mixin that intercepts keypress event and triggers submit via specified submit element.
It's actually fairly simple: public class OnEnter { @Parameter(required=true,defaultPrefix=BindingConstants.LITERAL) private String submitElement; @Inject private JavaScriptSupport javaScriptSupport; @InjectContainer private Form form; void afterRender () { JSONObject params = new JSONObject (); params.put ( "formId", form.getClientId () ); params.put ( "submitId", submitElement ); javaScriptSupport.addInitializerCall ( "onEnterHandler", params ); } } Tapestry.Initializer.onEnterHandler = function(spec) { jQuery(document).ready(function() { jQuery('#' + spec.formId).bind('keypress', function(event) { if (event.keyCode == 13) { event.preventDefault(); jQuery('#' + spec.submitId).click(); return false; } }); }); }; It's possible to extend it further, to make Enter handling more selective. On Sun, Apr 20, 2014 at 9:20 PM, Ilya Obshadko <ilya.obsha...@gmail.com>wrote: > I've tested "submit-on-enter" behavior and it turns out that different > browsers handle this in completely different manner. I've tried Safari, > Chrome and Firefox (latest versions available) on Mac OS X. > > The scenario included a form with hidden submit as its first child element. > > - Firefox acts as expected (that is, hidden submit is 'clicked' and thus > generates appropriate onSelected event) > - Chrome doesn't handle Enter at all (so form is not submitted after > pressing Enter in any text field) > - Safari submits the form, but ignores hidden submit field, so onSelected > is triggered on first visible submit > > I'm a little bit confused about this. Probably that's possible to create a > workaround using t:submit hidden field, but it's not completely clear for > me how this field is processed. > > > > On Fri, Apr 18, 2014 at 7:50 AM, Ilya Obshadko <ilya.obsha...@gmail.com>wrote: > >> Thanks Howard! That's probably keyDown/keyPressed events and it might be >> a little bit complicated when the same textfield acts as a base control for >> AutoComplete (of any kind). I'll do some research, too. >> >> >> On Fri, Apr 18, 2014 at 1:45 AM, Howard Lewis Ship <hls...@gmail.com>wrote: >> >>> That's standard HTML browser behavior; when you hit enter in a text >>> field, >>> is searches forward for a submit and clicks it. You can perhaps address >>> this by putting an event handler on the text field itself. I'd have to >>> do >>> experimentation/research to find the correct event. >>> >>> >>> On Thu, Apr 17, 2014 at 6:02 AM, Michael Gentry <mgen...@masslight.net >>> >wrote: >>> >>> > Hi Ilya, >>> > >>> > As far as I know, this is standard browser/form behavior, regardless >>> of the >>> > web framework you are using (Tapestry, PHP, etc). You can use >>> JavaScript >>> > to change the behavior or CSS to do tricky things, like move the >>> positions >>> > of the submit buttons when they render so that the one you want to >>> submit >>> > on Enter is first in the DOM, but can be elsewhere on the screen. >>> > >>> > mrg >>> > >>> > >>> > >>> > On Thu, Apr 17, 2014 at 8:14 AM, Ilya Obshadko < >>> ilya.obsha...@gmail.com >>> > >wrote: >>> > >>> > > I have an interesting question: what happens exactly when user >>> presses >>> > > Enter inside a TextField? >>> > > >>> > > Currently I see that form submit works as if it was triggered by the >>> > first >>> > > available Submit element (in order those elements appear in the >>> form). I >>> > > don't think this is correct, but I don't have any idea (yet) how to >>> > handle >>> > > it otherwise. >>> > > >>> > > Any thoughts? >>> > > >>> > > >>> > > -- >>> > > Ilya Obshadko >>> > > >>> > >>> >>> >>> >>> -- >>> Howard M. Lewis Ship >>> >>> Creator of Apache Tapestry >>> >>> The source for Tapestry training, mentoring and support. Contact me to >>> learn how I can get you up and productive in Tapestry fast! >>> >>> (971) 678-5210 >>> http://howardlewisship.com >>> @hlship >>> >> >> >> >> -- >> Ilya Obshadko >> >> > > > -- > Ilya Obshadko > > -- Ilya Obshadko