]> source.dussan.org Git - jquery-ui.git/commitdiff
Autocomplete: Work around `isContentEditable` bug in Chrome
authorScott González <scott.gonzalez@gmail.com>
Tue, 16 Feb 2016 15:22:45 +0000 (10:22 -0500)
committerScott González <scott.gonzalez@gmail.com>
Tue, 16 Feb 2016 17:22:10 +0000 (12:22 -0500)
Fixes #14917
Closes gh-1673

ui/widgets/autocomplete.js

index 060d8e94f8bf21e3ecdbd944eb7d16e9482e29e1..079b0dab07bd441b22d0ac33c092bfdac79158ae 100644 (file)
@@ -82,7 +82,7 @@ $.widget( "ui.autocomplete", {
                // Inputs are always single-line, even if inside a contentEditable element
                // IE also treats inputs as contentEditable
                // All other element types are determined by whether or not they're contentEditable
-               this.isMultiLine = isTextarea || !isInput && this.element.prop( "isContentEditable" );
+               this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );
 
                this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
                this.isNewMenu = true;
@@ -614,6 +614,24 @@ $.widget( "ui.autocomplete", {
                        // Prevents moving cursor to beginning/end of the text field in some browsers
                        event.preventDefault();
                }
+       },
+
+       // Support: Chrome <=50
+       // We should be able to just use this.element.prop( "isContentEditable" )
+       // but hidden elements always report false in Chrome.
+       // https://code.google.com/p/chromium/issues/detail?id=313082
+       _isContentEditable: function( element ) {
+               if ( !element.length ) {
+                       return false;
+               }
+
+               var editable = element.prop( "contentEditable" );
+
+               if ( editable === "inherit" ) {
+                 return this._isContentEditable( element.parent() );
+               }
+
+               return editable === "true";
        }
 } );