diff --git a/src/rails.js b/src/rails.js
index 6f89f251..bddeddd8 100644
--- a/src/rails.js
+++ b/src/rails.js
@@ -117,11 +117,11 @@
method = element.data('method');
url = element.data('url');
data = element.serialize();
- if (element.data('params')) data = data + "&" + element.data('params');
+ if (element.data('params')) data = data + "&" + element.data('params');
} else {
method = element.data('method');
url = element.attr('href');
- data = element.data('params') || null;
+ data = element.data('params') || null;
}
options = {
@@ -276,7 +276,7 @@
rails.handleRemote(link);
return false;
- });
+ });
$(rails.formSubmitSelector).live('submit.rails', function(e) {
var form = $(this),
@@ -309,7 +309,8 @@
});
$(rails.formInputClickSelector).live('click.rails', function(event) {
- var button = $(this);
+ var button = $(this),
+ remote = form.data('remote') !== undefined;
if (!rails.allowAction(button)) return rails.stopEverything(event);
@@ -317,7 +318,13 @@
var name = button.attr('name'),
data = name ? {name:name, value:button.val()} : null;
- button.closest('form').data('ujs:submit-button', data);
+ var form = button.closest('form');
+ form.data('ujs:submit-button', data);
+
+ if(remote) {
+ rails.handleRemote(form);
+ return false;
+ }
});
$(rails.formSubmitSelector).live('ajax:beforeSend.rails', function(event) {
diff --git a/test/public/test/data-remote.js b/test/public/test/data-remote.js
index 61cde2f7..4b5b3bbe 100644
--- a/test/public/test/data-remote.js
+++ b/test/public/test/data-remote.js
@@ -13,18 +13,17 @@ module('data-remote', {
method: 'post'
}))
.find('form').append($(''));
-
}
});
asyncTest('clicking on a link with data-remote attribute', 5, function() {
$('a[data-remote]')
- .bind('ajax:success', function(e, data, status, xhr) {
+ .bind('ajax:success', function(e, data, status, xhr) {
App.assert_callback_invoked('ajax:success');
App.assert_request_path(data, '/echo');
equal(data.params.data1, 'value1', 'ajax arguments should have key data1 with right value');
equal(data.params.data2, 'value2', 'ajax arguments should have key data2 with right value');
- App.assert_get_request(data);
+ App.assert_get_request(data);
})
.bind('ajax:complete', function() { start() })
.trigger('click');
@@ -44,12 +43,12 @@ asyncTest('changing a select option with data-remote attribute', 5, function() {
);
$('select[data-remote]')
- .bind('ajax:success', function(e, data, status, xhr) {
+ .bind('ajax:success', function(e, data, status, xhr) {
App.assert_callback_invoked('ajax:success');
App.assert_request_path(data, '/echo');
equal(data.params.user_data, 'optionValue2', 'ajax arguments should have key term with right value');
equal(data.params.data1, 'value1', 'ajax arguments should have key data1 with right value');
- App.assert_get_request(data);
+ App.assert_get_request(data);
})
.bind('ajax:complete', function() { start() })
.val('optionValue2')
@@ -58,16 +57,34 @@ asyncTest('changing a select option with data-remote attribute', 5, function() {
asyncTest('submitting form with data-remote attribute', 4, function() {
$('form[data-remote]')
- .bind('ajax:success', function(e, data, status, xhr) {
+ .bind('ajax:success', function(e, data, status, xhr) {
App.assert_callback_invoked('ajax:success');
App.assert_request_path(data, '/echo');
equal(data.params.user_name, 'john', 'ajax arguments should have key user_name with right value');
- App.assert_post_request(data);
+ App.assert_post_request(data);
})
.bind('ajax:complete', function() { start() })
.trigger('submit');
});
+asyncTest('submitting form with data-remote submit button', 4, function() {
+ $('form')
+ .data('remote', false)
+ .append(
+ $('', {
+ 'data-remote': true,
+ id: "remote-submit"
+ })
+ .bind('ajax:success', function(e, data, status, xhr) {
+ App.assert_callback_invoked('ajax:success');
+ App.assert_request_path(data, '/echo');
+ equal(data.params.user_name, 'john', 'ajax arguments should have key user_name with right value');
+ App.assert_post_request(data);
+ })
+ .bind('ajax:complete', function() { start() })
+ .trigger('submit#remote-submit');
+});
+
asyncTest('form\'s submit bindings in browsers that don\'t support submit bubbling', 4, function() {
var form = $('form[data-remote]'), directBindingCalled = false;