O'Reilly

Command + Enter to Submit Forms

By on  

I've used Mac's for about six years now but it wasn't until I started using Tweetdeck that I realized how awesome the [COMMAND]+[ENTER] key combination was.  Inside a textarea?  No problem -- [COMMAND]+[ENTER] and the form is submitted.  What if all forms could be that way?  They can be with a little JavaScript!

The JavaScript

There are two routes to go:  adding an event listener to the form (event delegate), or applying an event listener to specific textarea elements.  The safer route is event delegation, as dynamic forms can have many textareas added at any time, but per-textarea assignments are much more efficient. Ultimately it's up to the developer to know their form.  Here are three code samples to accomplish form submission in a variety of ways:

// Assign to individual textarea (most efficient)
myTextarea.addEventListener('keydown', function(e) {
	if(e.keyCode == 13 && e.metaKey) {
		this.form.submit();
	}
});

// Form event delegation - individual form (somewhat efficient)
form.addEventListener('keydown', function(e) {
	if(!(e.keyCode == 13 && e.metaKey)) return;

	var target = e.target;
	if(target.form) {
		target.form.submit();
	}
});

// Body event delegation - any form (least efficient)
document.body.addEventListener('keydown', function(e) {
	if(!(e.keyCode == 13 && e.metaKey)) return;

	var target = e.target;
	if(target.form) {
		target.form.submit();
	}
});


Tweetdeck uses [COMMAND]+[ENTER] as does GitHub on some of their forms.  I've naturally started checking for this key command combo instead of tabbing to a field which will submit the form via traditional [ENTER] key.

Track.js Error Reporting

Recent Features

  • Write Better JavaScript with Promises

    You've probably heard the talk around the water cooler about how promises are the future. All of the cool kids are using them, but you don't see what makes them so special. Can't you just use a callback? What's the big deal? In this article, we'll...

  • Introducing MooTools Templated

    One major problem with creating UI components with the MooTools JavaScript framework is that there isn't a great way of allowing customization of template and ease of node creation. As of today, there are two ways of creating: new Element Madness The first way to create UI-driven...

Incredible Demos

  • “Top” Watermark Using MooTools

    Whenever you have a long page worth of content, you generally want to add a "top" anchor link at the bottom of the page so that your user doesn't have to scroll forever to get to the top. The only problem with this method is...

  • Degradable SELECT onChange

    Whenever I go to Google Analytics I notice a slight flicker in the dropdown list area. I see a button appear for the shortest amount of time and the poof! Gone. What that tells me is that Google is making their site function...

Discussion

  1. Markus

    In case you use jquery event handlers you should wrap the form-element with jquery and call jquery’s .submit() method, otherwise jquery event handlers won’t be fired.

  2. Hey David, great post. I think key actions are one of the awesome UX features we lost from the purely desktop development days. Where I work, we use a ticket tracking service called JIRA. JIRA has some bad ass key actions that make working with the service such a joy. I created a small utility called keyper, https://github.com/dustinhayes/keyper, that allows the user to bind functions to key commands. Hopefully this could help bridge the gap a bit.

  3. Ling

    In some CMS that’s the Shortcut for a linebreak..

    • The standard for linebreak is SHIFT+ENTER, so I would argue the CMS did something unintuitive

  4. Asmor

    Ctrl+enter is the same in Windows. It’s not used everywhere, but it’s pretty common.

  5. I disagree about attaching an event handler to all textareas being the most efficient. If you have a large number of text editors, the form event delegation would be more efficient due to it only using a single event listener.

    • I said that because if your form has numerous INPUT[type=text] elements, you’d be executing functionality upon every keystroke if you were doing event delegation.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • OSCON Portland:  Conference  Discount!

    O'Reilly puts on the best web industry conferences in the world.  These conferences include Fluent Conference, Velocity Conference, and the upcoming OSCON in Portland, Oregon from July 20-24.  Open Source Convention (OSCON) is a conference that focuses specifically on open source developers and the tools and possibilities...

  • Follow Redirects with cURL

    I love playing around with cURL. There's something about loading websites via command line that makes me feel like some type of smug hacker, just like tweeting from command line does. I recently cURL'd the Google homepage and saw the following: I found it weird that Google...

  • Developers Have WordPress, Amateurs Have Squarespace, Professional Designers Have the NEW Webydo!

    Web design platforms have traditionally come in one of two varieties. There are the solutions like WordPress and Drupal that are incredibly powerful, but an understanding of web development and coding is required to be able to use those platforms effectively. On the other side of the...

  • Chris Coyierâs Favorite CodePen Demos II

    Hey everyone! Before we get started, I just want to say it’s damn hard to pick this few favorites on CodePen. Not because, as a co-founder of CodePen, I feel like a dad picking which kid he likes best (RUDE). But because there is just so...

  • GSAP + SVG For Power Users: Motion Along A Path

    Now that the GreenSock API is picking up steam, there are many tutorials and Getting Started guides out there to provide good introductions to the library, not to mention GreenSock’s own Forum and Documentation. This article isn’t intended for beginners, but rather a...