From 2dcd84c4f21a9d2f720273729fe2be0145916cdd Mon Sep 17 00:00:00 2001 From: fansaien Date: Thu, 3 Jan 2019 16:24:43 -0600 Subject: [PATCH] Fix the input trigger API where a form element doesn't exist (#4033) There are no `form` elements in the preview context of a form, so this adds an alternative selector to use when no common `form` elements are found for the Input Trigger API to use. Credit to @fansaien --- modules/backend/classes/FormField.php | 2 +- modules/system/assets/ui/js/input.trigger.js | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/backend/classes/FormField.php b/modules/backend/classes/FormField.php index 0d3c629ac..f47365548 100644 --- a/modules/backend/classes/FormField.php +++ b/modules/backend/classes/FormField.php @@ -511,7 +511,7 @@ class FormField 'data-trigger' => '[name="'.$fullTriggerField.'"]', 'data-trigger-action' => $triggerAction, 'data-trigger-condition' => $triggerCondition, - 'data-trigger-closest-parent' => 'form' + 'data-trigger-closest-parent' => 'form, div[data-control="formwidget"]' ]; return $attributes + $newAttributes; diff --git a/modules/system/assets/ui/js/input.trigger.js b/modules/system/assets/ui/js/input.trigger.js index 980e287ff..e9403497a 100644 --- a/modules/system/assets/ui/js/input.trigger.js +++ b/modules/system/assets/ui/js/input.trigger.js @@ -28,9 +28,17 @@ this.triggerConditionValue = (match) ? match : [""] } - this.triggerParent = this.options.triggerClosestParent !== undefined - ? $el.closest(this.options.triggerClosestParent) - : undefined + this.triggerParent = undefined + if (this.options.triggerClosestParent !== undefined) { + var closestParentElements = this.options.triggerClosestParent.split(',') + for (var i = 0; i < closestParentElements.length; i++) { + var $triggerElement = $el.closest(closestParentElements[i]) + if ($triggerElement.length) { + this.triggerParent = $triggerElement + break + } + } + } if ( this.triggerCondition == 'checked' ||