9ca712348e
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. |
||
---|---|---|
.. | ||
features | ||
utils | ||
config.coffee | ||
MIT-LICENSE | ||
rails-ujs.coffee | ||
README.md |
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.