diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
index e66d590ed8..5c26b5a418 100644
--- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
@@ -259,7 +259,8 @@ public static function process($element, FormStateInterface $form_state, $form)
   public static function validateRequiredFields($element, FormStateInterface $form_state) {
     // Only do validation if the function is triggered from other places than
     // the image process form.
-    if (!in_array('file_managed_file_submit', $form_state->getTriggeringElement()['#submit'])) {
+    $triggering_element = $form_state->getTriggeringElement();
+    if (empty($triggering_element['#submit']) || !in_array('file_managed_file_submit', $triggering_element['#submit'])) {
       // If the image is not there, we do not check for empty values.
       $parents = $element['#parents'];
       $field = array_pop($parents);
diff --git a/core/modules/image/src/Tests/ImageFieldValidateTest.php b/core/modules/image/src/Tests/ImageFieldValidateTest.php
index ba1a766509..22d310d907 100644
--- a/core/modules/image/src/Tests/ImageFieldValidateTest.php
+++ b/core/modules/image/src/Tests/ImageFieldValidateTest.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\image\Tests;
 
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field\Entity\FieldConfig;
+
 /**
  * Tests validation functions such as min/max resolution.
  *
@@ -238,4 +241,43 @@ public function testAJAXValidationMessage() {
     $this->assertEqual(count($elements), 1, 'Ajax validation messages are displayed once.');
   }
 
+  /** 
+   * Tests that image field validation works with other form submit handlers.
+   */
+  public function testFriendlyAjaxValidation() {
+    // Add a custom field to the Article content type that contains
+    // an AJAX handler on a select field.
+    $field_storage = FieldStorageConfig::create([
+      'field_name' => 'field_dummy_select',
+      'type' => 'image_module_test_dummy_ajax',
+      'entity_type' => 'node',
+      'cardinality' => 1,
+    ]);
+    $field_storage->save();
+
+    $field = FieldConfig::create([
+      'field_storage' => $field_storage,
+      'entity_type' => 'node',
+      'bundle' => 'article',
+      'field_name' => 'field_dummy_select',
+      'label' => t('Dummy select'),
+    ])->save();
+
+    entity_get_form_display('node', 'article', 'default')
+      ->setComponent('field_dummy_select', array(
+        'type' => 'image_module_test_dummy_ajax_widget',
+        'weight' => 1,
+      ))
+      ->save();
+
+    // Then, add an image field.
+    $this->createImageField('field_dummy_image', 'article');
+
+    // Open an article and trigger the AJAX handler.
+    $this->drupalGet('node/add/article');
+    $edit = array(
+      'field_dummy_select[select_widget]' => 'bam',
+    );
+    $this->drupalPostAjaxForm(NULL, $edit, 'field_dummy_select[select_widget]');
+  }
 }
diff --git a/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldFormatter/DummyAjaxFormatter.php b/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldFormatter/DummyAjaxFormatter.php
new file mode 100644
index 0000000000..cebc54beca
--- /dev/null
+++ b/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldFormatter/DummyAjaxFormatter.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\image_module_test\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Field\FormatterBase;
+
+/**
+ * Empty renderer for a dummy field with an AJAX handler.
+ *
+ * @FieldFormatter(
+ *   id = "image_module_test_dummy_ajax_formatter",
+ *   module = "image_module_test",
+ *   label = @Translation("Dummy AJAX"),
+ *   field_types= {
+ *     "image_module_test_dummy_ajax"
+ *   }
+ * )
+ */
+class DummyAjaxFormatter extends FormatterBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsSummary() {
+    $summary = [];
+    $summary[] = t('Renders nothing');
+    return $summary;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items, $langcode) {
+    $element = [];
+    return $element;
+  }
+
+}
diff --git a/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldType/DummyAjaxItem.php b/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldType/DummyAjaxItem.php
new file mode 100644
index 0000000000..50b77bd1c9
--- /dev/null
+++ b/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldType/DummyAjaxItem.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\image_module_test\Plugin\Field\FieldType;
+
+use Drupal\Core\Field\FieldItemBase;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\Core\TypedData\DataDefinition;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+
+/**
+ * Defines a dummy field containing an AJAX handler.
+ *
+ * @FieldType(
+ *   id = "image_module_test_dummy_ajax",
+ *   label = @Translation("Dummy AJAX"),
+ *   description = @Translation("A field containing an AJAX handler."),
+ *   category = @Translation("Field"),
+ *   default_widget = "image_module_test_dummy_ajax_widget",
+ *   default_formatter = "image_module_test_dummy_ajax_formatter"
+ * )
+ */
+class DummyAjaxItem extends FieldItemBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function schema(FieldStorageDefinitionInterface $field_definition) {
+    return [
+      'columns' => [
+        'value' => [
+          'type' => 'varchar',
+          'length' => 255,
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isEmpty() {
+    return empty($this->get('value')->getValue());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
+    $properties['value'] = DataDefinition::create('string')
+      ->setLabel(new TranslatableMarkup('Dummy string value'));
+
+    return $properties;
+  }
+
+}
diff --git a/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldWidget/DummyAjaxWidget.php b/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldWidget/DummyAjaxWidget.php
new file mode 100644
index 0000000000..d3ebc3442d
--- /dev/null
+++ b/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldWidget/DummyAjaxWidget.php
@@ -0,0 +1,57 @@
+<?php
+
+namespace Drupal\image_module_test\Plugin\Field\FieldWidget;
+
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Field\WidgetBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Default widget for Zeus videos.
+ *
+ * @FieldWidget(
+ *   id = "image_module_test_dummy_ajax_widget",
+ *   label = @Translation("Dummy AJAX widget"),
+ *   field_types = {
+ *     "image_module_test_dummy_ajax"
+ *   },
+ *   multiple_values = TRUE,
+ * )
+ */
+class DummyAjaxWidget extends WidgetBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
+    $element['select_widget'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Dummy select'),
+      '#options' => ['pow' => 'Pow!', 'bam' => 'Bam!'],
+      '#required' => TRUE,
+      '#ajax' => [
+        'callback' => get_called_class() . '::dummyAjaxCallback',
+        'effect' => 'fade',
+      ],
+    ];
+
+    return $element;
+  }
+
+  /**
+   * Ajax callback to update the video widget fields when select is changed.
+   *
+   * @param array $form
+   *   The build form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The form state.
+   *
+   * @return \Drupal\Core\Ajax\AjaxResponse
+   *   Ajax response with updated widget for video.
+   */
+  public static function dummyAjaxCallback(array &$form, FormStateInterface $form_state) {
+    return new AjaxResponse();
+  }
+
+}
