Skip to content

Commit fd9f9d0

Browse files
committed
Resolves
https://github.com/dockyard/client_side_validations-formtastic/issues/8 Don't allow propagation of any events if form is invalid
1 parent a8c0051 commit fd9f9d0

File tree

6 files changed

+27
-2
lines changed

6 files changed

+27
-2
lines changed

client_side_validations.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ Gem::Specification.new do |s|
2626
s.add_development_dependency 'thin'
2727
s.add_development_dependency 'json'
2828
s.add_development_dependency 'coffee-script'
29+
s.add_development_dependency 'jquery-rails'
2930
end

coffeescript/rails.validations.coffee

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,10 @@ window.ClientSideValidations.enablers =
133133

134134
# Set up the events for the form
135135
$form.on(event, binding) for event, binding of {
136-
'submit.ClientSideValidations' : (eventData) -> eventData.preventDefault() unless $form.isValid(form.ClientSideValidations.settings.validators)
136+
'submit.ClientSideValidations' : (eventData) ->
137+
unless $form.isValid(form.ClientSideValidations.settings.validators)
138+
eventData.preventDefault()
139+
eventData.stopImmediatePropagation()
137140
'ajax:beforeSend.ClientSideValidations' : (eventData) -> $form.isValid(form.ClientSideValidations.settings.validators) if eventData.target == @
138141
'form:validate:after.ClientSideValidations' : (eventData) -> ClientSideValidations.callbacks.form.after( $form, eventData)
139142
'form:validate:before.ClientSideValidations': (eventData) -> ClientSideValidations.callbacks.form.before($form, eventData)

test/javascript/public/test/form_builders/validateForm.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,21 @@ test('Resetting client side validations', 9, function() {
107107
ok(input.parent().find('label:contains("must be present")')[0]);
108108
});
109109

110+
asyncTest('Handle disable-with', 1, function() {
111+
var form = $('form#new_user'), input = form.find('input#user_name');
112+
var label = $('label[for="user_name"]');
113+
form.append($('<input />', {
114+
type: 'submit',
115+
'data-disable-with': 'Waiting...',
116+
name: 'commit',
117+
value: 'Save',
118+
id: 'submit_button'
119+
}));
120+
121+
form.trigger('submit');
122+
setTimeout(function() {
123+
start();
124+
ok($('#submit_button').attr('disabled') === undefined)
125+
}, 60);
126+
});
127+

test/javascript/server.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def call(env)
4747
end
4848

4949
use AssetPath, :urls => ['/vendor/assets/javascripts'], :root => File.expand_path('../..', settings.root)
50+
use AssetPath, :urls => ['/vendor/assets/javascripts'], :root => File.expand_path('../', $:.find { |p| p =~ /jquery-rails/ })
5051

5152
JQUERY_VERSIONS = %w[ 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.7 1.7.1 1.7.2].freeze
5253

test/javascript/views/layout.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</style>
1313

1414
<%= script_tag jquery_src %>
15+
<%= script_tag "/vendor/assets/javascripts/jquery_ujs.js" %>
1516
<%= script_tag "/vendor/assets/javascripts/rails.validations.js" %>
1617
</head>
1718

vendor/assets/javascripts/rails.validations.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)