1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionview/app/assets/javascripts
Patrick Toomey 9ca712348e
Prevent event propogation if element is disabled when event chain begins.
The existing UJS event behavior relies on browsers not sending events for
various events when an element is disabled. For example, imagine the following:

    <button type="submit" disabled="disabled">Click me</button>

The above button is disabled, so browsers will not trigger a click event and
all UJS behavior is prevented. However, imagine a button like this:

    <button type="submit" disabled="disabled"><strong>Click me</strong></button>

The above is treated differently by browsers such as Chrome/Safari. These
browsers do not consider the strong tag to be disabled, and will trigger click
events. UJS has logic to walk up the DOM to find an associated element subject
to UJS behavior. But, this logic does not take into account the disabled
status of the element.

I originally thought we could simply change the selectors used to match
elements to ignore disabled elements. However, UJS disables some elements as
part of the event chain. So, an element might match early in the chain and
then fail to match later. Instead of changing the selectors I added a callback
to the chain that calls `stopEverything` if an element is disabled when the
event chain begins.
2017-03-09 23:06:18 -07:00
..
features Prevent event propogation if element is disabled when event chain begins. 2017-03-09 23:06:18 -07:00
utils Import rails-ujs v0.1.0 from rails/rails-ujs 2017-02-20 14:29:55 +09:00
config.coffee Import rails-ujs v0.1.0 from rails/rails-ujs 2017-02-20 14:29:55 +09:00
MIT-LICENSE Move rails-ujs README and LICENCE to actionview 2017-02-22 13:49:27 -05:00
rails-ujs.coffee Prevent event propogation if element is disabled when event chain begins. 2017-03-09 23:06:18 -07:00
README.md Move rails-ujs README and LICENCE to actionview 2017-02-22 13:49:27 -05:00

Ruby on Rails unobtrusive scripting adapter.

This unobtrusive scripting support file is developed for the Ruby on Rails framework, but is not strictly tied to any specific backend. You can drop this into any application to:

  • force confirmation dialogs for various actions;
  • make non-GET requests from hyperlinks;
  • make forms or hyperlinks submit data asynchronously with Ajax;
  • have submit buttons become automatically disabled on form submit to prevent double-clicking.

These features are achieved by adding certain "data" attributes to your HTML markup. In Rails, they are added by the framework's template helpers.

Requirements

  • HTML5 doctype (optional).

If you don't use HTML5, adding "data" attributes to your HTML4 or XHTML pages might make them fail W3C markup validation. However, this shouldn't create any issues for web browsers or other user agents.

Installation using npm

Run npm install rails-ujs --save to install the rails-ujs package.

Installation using Yarn

Run yarn add rails-ujs to install the rails-ujs package.

Usage

Require rails-ujs into your application.js manifest.

//= require rails-ujs

How to run tests

Run bundle exec rake ujs:server first, and then run the web tests by visiting http://localhost:4567 in your browser.

License

rails-ujs is released under the MIT License.