Issue #3347144 by dgtlmoon, mstrelan, Evaldas Užkuras, bkosborne, FeyP, pirvudoru: Form API #states property/states should use .once() to apply its rules (Can cause failures with BigPipe and possibly other situations)

merge-requests/5017/head
catch 2024-01-01 15:28:41 +00:00
parent e6304cd961
commit d6b6ad8fd6
2 changed files with 7 additions and 6 deletions

View File

@ -93,15 +93,16 @@
*/
Drupal.behaviors.states = {
attach(context, settings) {
const $states = $(context).find('[data-drupal-states]');
const il = $states.length;
const elements = once('states', '[data-drupal-states]', context);
const il = elements.length;
for (let i = 0; i < il; i++) {
const config = JSON.parse(
$states[i].getAttribute('data-drupal-states'),
elements[i].getAttribute('data-drupal-states'),
);
Object.keys(config || {}).forEach((state) => {
new states.Dependent({
element: $($states[i]),
element: $(elements[i]),
state: states.State.sanitize(state),
constraints: config[state],
});
@ -120,7 +121,7 @@
*
* @constructor Drupal.states.Dependent
*
* @param {object} args
* @param {{state: Drupal.states.state, constraints: *, element: (*|jQuery|HTMLElement)}} args
* Object with the following keys (all of which are required)
* @param {jQuery} args.element
* A jQuery object of the dependent element

View File

@ -27,7 +27,7 @@ class JavascriptStatesTest extends WebDriverTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['form_test'];
protected static $modules = ['form_test', 'big_pipe'];
/**
* {@inheritdoc}