If you have a dependent element #states set as such:

'disabled' => array(
              ':input[name="dependee-field"]' => array('filled' => TRUE)
            )

and you right click into the dependee-field and select paste from the contextual menu, the dependee-field is filled with the value but the dependent field(s) are not disabled.

Looking at the file: <drupal root>/misc/states.js starting on line 365:

  empty: {
    // 'keyup' is the (native DOM) event that we watch for.
    'keyup': function () {
      // The function associated to that trigger returns the new value for the
      // state.
      return this.val() == '';
    }
  },

It is clear that the empty check that is used for the keyword "filled" only triggers on the "keyup" event, not mouse actions.

I was able to make a change that works, but is a little weird UI wise.

  empty: {
    // 'keyup' is the (native DOM) event that we watch for.
    'keyup': function () {
      // The function associated to that trigger returns the new value for the
      // state.
      return this.val() == '';
    },
    'change': function(){
      return this.val() == '';
    }
  },

This causes the dependent field to be disabled normally when the keyboard is used to enter data into the dependee field. It also causes the dependent field to be disabled on right-click paste, but only once the user clicks out of the field, this is not quite ideal, but does get the intended job done. I am happy to make a patch, but wanted to make sure the slight UI weirdness is acceptable before bothering.

Comments

DrCord’s picture

Issue summary: View changes
dcam’s picture

Version: 7.34 » 8.0.x-dev
Category: Bug report » Feature request
Issue tags: -states.js +JavaScript

This section of states.js is the same in Drupal 8. It would have to be changed there first, then backported.

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

scotself’s picture

Same thing here, but it's not just mouse-based pasting. Using a tool like JumpCut to paste also doesn't trigger the 'filled' criteria being set to TRUE, so dependent form components don't get displayed when something is pasted into the field.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.