O'Reilly

HTML5 autofocus Attribute

By on  

HTML5 threw a whole bunch of awesomeness at us. Tasks we accomplished with JavaScript and Flash, like basic form validation, INPUT placeholders, client side file naming, and audio/video, can now be completed using basic HTML. Another simple functionality HTML now allows us is auto-focusing on elements upon page load; this is accomplished using the autofocus attribute.

The code is as simple as it gets:

<!-- These all work! -->
<input autofocus />
<button autofocus>Hi!</button>
<textarea autofocus></textarea>

When the autofocus attribute is present, the INPUT, TEXTAREA, or BUTTON element is automatically selected upon page load. I experimented with display elements (H1 tag) and a tabIndex of 0, but autofocus did not work for them.

This attribute is especially useful on pages whose main purpose is collecting information, like Google's homepage (search is the use 99% of the time) or even an online guided installer (like WordPress' installer). And best of all -- no JavaScript needed!

Track.js Error Reporting

Upcoming Events

Recent Features

  • 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...

  • Creating Scrolling Parallax Effects with CSS

    Introduction For quite a long time now websites with the so called "parallax" effect have been really popular. In case you have not heard of this effect, it basically includes different layers of images that are moving in different directions or with different speed. This leads to a...

Incredible Demos

  • Page Visibility API

    One event that's always been lacking within the document is a signal for when the user is looking at a given tab, or another tab. When does the user switch off our site to look at something else? When do they come back?...

  • CSS calc

    CSS is a complete conundrum; we all appreciate CSS because of its simplicity but always yearn for the language to do just a bit more. CSS has evolved to accommodate placeholders, animations, and even click events. One problem we always thought...

Discussion

  1. For those interested, autofocus is currently not supported in Safari Mobile for iOS 5.x or Android’s browser app (2.3 and below, not sure on support in newer versions).

    Information found at http://wufoo.com/html5/attributes/02-autofocus.html

  2. jonathan 2 M

    Also READONLY is a funny attribute for input, it disallow the input to be writtable.

  3. I just did a little testing and Chrome actually focuses on elements that have the autofocus attribute and are injected via JavaScript… But FF and IE don’t.

    Not sure if that’s part of the spec or not, but it’s there.

  4. David

    You’re always full of “nice to know” stuff that we can use in our everyday coding. Thanks!

  5. The implementation of the feature is a little “magical” in some browsers, but I hope it will be all right in future.

  6. In fact, it’s even simpler than that! Rather than using an attribute you can use a flag with the HTML5 doctype:

    Hi!

  7. In fact, it’s even simpler than that! Rather than using an attribute you can use a flag with the HTML5 doctype:


    Hi!

  8. Sorry, tried wrapping it in code tag but to no avail!

  9. The historical problem with autofocus is that it acts on “load” event. If in the meanwhile you started interacting with the browser url bar or any other input in the page, it moves the focus away and you gonna end up writing shenanigans. As example, you start typing your password in input 2 but the page set autofocus on input 1 … when the focus is stolen from input 2 you might end up writing amd showing to everyone your password without realizing the focus changed.

    Unless browsers vendors implement a way to prevent this, as soon as the user start interacting with the page the autofocus attribute should be removed.

    !function(html, autofocus){
    function drop() {
      for(i = 0; i < event.length; html.removeEventListener(event[i++], drop, true));
      document.querySelector(
        "[" + autofocus + "=" + autofocus + "]"
      ).removeAttribute(autofocus);
    }
    for(var
      event = "touchstart mousedown scrool mousewheel".split(" "), // etc
      i = 0; i < event.length; i++
    ) {
      html.addEventListener(event[i], drop, true);
    }
    }(document.documentElement, "autofocus");
    

    or something like that …

  10. However I personally don’t like autofocus on certain sites – and it especially annoy me at Google’s homepage – because it messes up a possibility to return to previous page with the [backspace].

    • Alex

      Alt + Left/Right

      Hope Gnome would accept the same shortcuts…

  11. Rusty

    @Andrea Giammarchi – which browsers in your opinion implement autofocus in onload? Tried in FF, Chrome and Opera, autofocus activates immediately. IE doesn’t support autofocus at all. So I’m curious to know which browser implements it incorrectly that would require your workaround.

  12. Jeff

    Rusty, try http://caniuse.com

  13. Little tips like this make a huge difference in day-to-day development!

  14. Hi,

    I have an input type=number, which should be focused when the page loads…it works just fine in my desktop browser, but in my mobile device, it doesn’t! I mean, once the page loads, it should focus the input and show the virtual(touchable) keyboard(better fit for numbers), but the keyboard is not shown!
    even if I try to focus it via javascript using the page load event, it doesn’t work :/
    the weird thing is that, if I change the input type to text, it works!

    any idea?!

  15. patomas

    Hi

    Has anybody ever had the need to change the focus of an input field on load? If, have you considered that the form could have been badly designed?

    Bye

  16. federico lanusse

    Note for the security pen testers (like I’m), the combination of onfocus + autofocus open a new territory for XSS’s attacks

  17. Sorry, my badx2! Let’s try again …
    I’m looking for a solution to this dilemma …
    When autofocus is used on a form input element on a one-page site (using section navigation), autofocus is never implemented (or should I say “is lost”) because the user changed the focus when he clicked a menu tag in the header …

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

  • Free Download: Font Bundle Featuring 17 Incredible Typefaces

    The only thing we love more than a good font, is a good free font. So we’ve combed the Web for some of our favorite free fonts, and gathered them here in a single download. You’ll find a variety of useful typefaces, from highly geometric designs...

  • OâReilly Velocity Conference â Amsterdam

    My favorite front-end conference has always been O'Reilly's Velocity Conference because the conference series has focused on one of the most undervalued parts of client side coding:  speed.  So often we're so excited that our JavaScript works that we forget that speed, efficiency, and performance are just as important. The next Velocity...

  • CanIUse Command Line

    Every front-end developer should be well acquainted with CanIUse, the website that lets you view browser support for browser features.  When people criticize my blog posts for not detailing browser support for features within the post, I tell them to check CanIUse:  always up to date, unlike...

  • Generating Alternative Stylesheets for Browsers Without @media

    If your CSS code is built with a mobile-first approach, it probably contains all the rules that make up the "desktop" view inside @media statements. That's great, but browsers that don't support media queries (IE 8 and below) will simply ignore them, ending up getting the...

  • Serve a Directory with PHP

    Many developers have a giggle at PHP, even looking down at the language, but let's be honest:  most of our blogs are powered by it (WordPress) and it's a great language to dabble around with.  I cut my teeth on PHP, though I prefer to avoid PHP these days. But...