From b2d59e7c8d4a4c6189c61299b6029d5068fec929 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Sat, 28 Nov 2020 12:44:44 +0000 Subject: [PATCH] Quick/Bulk Edit: Fix `undefined` error when initializing UI Autocomplete 1.12.1 on non-existing element and then attempting to use the autocomplete instance. Example: `jQuery( '#nonexisting' ).autocomplete().autocomplete( 'instance' ).something`. Props _luigi, sabernhardt, donmhico, azaozz. Fixes #51872. git-svn-id: https://develop.svn.wordpress.org/trunk@49703 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/_enqueues/admin/inline-edit-post.js | 5 +++++ src/js/_enqueues/admin/tags-suggest.js | 24 +++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/js/_enqueues/admin/inline-edit-post.js b/src/js/_enqueues/admin/inline-edit-post.js index c7d07e6cdf..98fdb6cf32 100644 --- a/src/js/_enqueues/admin/inline-edit-post.js +++ b/src/js/_enqueues/admin/inline-edit-post.js @@ -329,6 +329,11 @@ window.wp = window.wp || {}; textarea = $('textarea.tax_input_' + taxname, editRow), comma = wp.i18n._x( ',', 'tag delimiter' ).trim(); + // Ensure the textarea exists. + if ( ! textarea.length ) { + return; + } + terms.find( 'img' ).replaceWith( function() { return this.alt; } ); terms = terms.text(); diff --git a/src/js/_enqueues/admin/tags-suggest.js b/src/js/_enqueues/admin/tags-suggest.js index 1aa28ffc8b..7a19002a4c 100644 --- a/src/js/_enqueues/admin/tags-suggest.js +++ b/src/js/_enqueues/admin/tags-suggest.js @@ -38,6 +38,11 @@ var last; var $element = $( this ); + // Do not initialize if the element doesn't exist. + if ( ! $element.length ) { + return; + } + options = options || {}; var taxonomy = options.taxonomy || $element.attr( 'data-wp-taxonomy' ) || 'post_tag'; @@ -146,13 +151,18 @@ $element.on( 'keydown', function() { $element.removeAttr( 'aria-activedescendant' ); - } ) - .autocomplete( options ) - .autocomplete( 'instance' )._renderItem = function( ul, item ) { - return $( '
  • ' ) - .text( item.name ) - .appendTo( ul ); - }; + } ); + + $element.autocomplete( options ); + + // Ensure the autocomplete instance exists. + if ( $element.autocomplete( 'instance' ) ) { + $element.autocomplete( 'instance' )._renderItem = function( ul, item ) { + return $( '
  • ' ) + .text( item.name ) + .appendTo( ul ); + }; + } $element.attr( { 'role': 'combobox',