Skip to content


Subversion checkout URL

You can clone with
Download ZIP


Performance: changePage() searches the entire document for :focus elements #1560

jblas opened this Issue · 15 comments

In changePage() I see this:

$( window.document.activeElement || "" ).add( "input:focus, textarea:focus, select:focus" ).blur();

This will cause JQM to search the entire document every time we change pages just to release keyboard focus. Instead, we should probably be using a live("focus") handler and tracking the currently focused element so we don't have to crawl the document.

@jblas jblas was assigned

I'll try to address this as part of the path navigation re-working I'm doing.


Related changePage() performance issue:



Hey Kin, looking into this, unless I'm missing something window.document.activeElement is determinate. It's a reference to the page's h1 element typically. So this line does no document searching at all.

On the other hand, if you are actually referring to refocus(), which looks to be the other facet of this, then I understand :-)


But the add() searches the document doesn't it?


Doh! Right you are. I was looking at the wrong alternate signatures of .add().

Nevermind. :-)


Something worth speed-testing: I bet $(":input:focus").blur() may be streets faster since, internally, the :input is regex-driven.


jsperf comparison?


Is this still a concern? Already fixed?


We're still searching for :focus elements, so this should stay open.


See also #1855


Related to #4340


Hey @jaspermdegroot @jblas This issue is super old (has it really been 3 years since 2011?!?) Can you confirm whether this is still an issue or if it has been fixed with new releases of JQM? Thanks!


@ldeluca Even though this is super old, the issue/performance loss is still valid. Seaching line 5573 reveals that this is still an issue:

// Kill the keyboard.
// XXX_jblas: We need to stop crawling the entire document to kill focus.
// Instead, we should be tracking focus with a delegate()
// handler so we already have the element in hand at this
// point.

@gabrielschulhof gabrielschulhof added this to the 1.5.0 milestone
  1. Why do we need to kill focus? To get rid of the virtual keyboard?
  2. How often do we end up using the selector instead of document.activeElement?
  3. Does it really slow down our supported browsers significantly?

If we end up keeping the selector we need to change it to this.document.find( "input:focus, textarea:focus, select:focus" ).blur(). We also need to change document.activeElement to this.document[ 0 ].activeElement.

@arschmitz Could you please weigh in? Here's the code in question.

@arschmitz arschmitz removed their assignment

We discussed this today it does not look like there is any case where this will actually happen. so lets go ahead and remove this, and clean it up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.