jquery.suggestions: Hide the suggestions list asynchronously
authorBartosz Dziewoński <matma.rex@gmail.com>
Fri, 28 Mar 2014 17:48:24 +0000 (18:48 +0100)
committerBartosz Dziewoński <matma.rex@gmail.com>
Thu, 8 May 2014 21:50:33 +0000 (23:50 +0200)
Hiding the link we're just clicking on causes problems when done
synchronously in at least Firefox 3.6 (bug 62858) – the link is not
followed.

Also update incorrect and misformatted comments.

Bug: 62858
Change-Id: I52ed745e66c477527b6af031c222f8f221e0328b

resources/src/jquery/jquery.suggestions.js

index 22e8652..7d200ff 100644 (file)
@@ -535,15 +535,20 @@ $.fn.suggestions = function () {
                                                        if ( $result.get( 0 ) !== $other.get( 0 ) ) {
                                                                return;
                                                        }
-                                                       // do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click)
+                                                       // Do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click).
                                                        if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
                                                                $.suggestions.highlight( context, $result, true );
-                                                               $.suggestions.hide( context );
                                                                if ( typeof context.config.result.select === 'function' ) {
                                                                        context.config.result.select.call( $result, context.data.$textbox );
                                                                }
+                                                               // This will hide the link we're just clicking on, which causes problems
+                                                               // when done synchronously in at least Firefox 3.6 (bug 62858).
+                                                               setTimeout( function () {
+                                                                       $.suggestions.hide( context );
+                                                               }, 0 );
                                                        }
-                                                       // but still restore focus to the textbox, so that the suggestions will be hidden properly
+                                                       // Always bring focus to the textbox, as that's probably where the user expects it
+                                                       // if they were just typing.
                                                        context.data.$textbox.focus();
                                                } )
                                )
@@ -563,14 +568,19 @@ $.fn.suggestions = function () {
                                                        if ( $special.get( 0 ) !== $other.get( 0 ) ) {
                                                                return;
                                                        }
-                                                       // do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click)
+                                                       // Do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click).
                                                        if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
-                                                               $.suggestions.hide( context );
                                                                if ( typeof context.config.special.select === 'function' ) {
                                                                        context.config.special.select.call( $special, context.data.$textbox );
                                                                }
+                                                               // This will hide the link we're just clicking on, which causes problems
+                                                               // when done synchronously in at least Firefox 3.6 (bug 62858).
+                                                               setTimeout( function () {
+                                                                       $.suggestions.hide( context );
+                                                               }, 0 );
                                                        }
-                                                       // but still restore focus to the textbox, so that the suggestions will be hidden properly
+                                                       // Always bring focus to the textbox, as that's probably where the user expects it
+                                                       // if they were just typing.
                                                        context.data.$textbox.focus();
                                                } )
                                                .mousemove( function ( e ) {