diff --git a/src/rails.js b/src/rails.js index 837f45a2..579d742c 100644 --- a/src/rails.js +++ b/src/rails.js @@ -34,7 +34,7 @@ formSubmitSelector: 'form', // Form input elements bound by jquery-ujs - formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type])', + formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])', // Form input elements disabled during form submission disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled', diff --git a/test/public/test/data-confirm.js b/test/public/test/data-confirm.js index b84dd280..d29735fa 100644 --- a/test/public/test/data-confirm.js +++ b/test/public/test/data-confirm.js @@ -14,6 +14,18 @@ module('data-confirm', { text: 'Click me' })); + $('#qunit-fixture').append($('
', { + id: 'confirm', + action: '/echo', + 'data-remote': 'true' + })); + + $('#qunit-fixture').append($('', { + type: 'submit', + form: 'confirm', + 'data-confirm': 'Are you absolutely sure?' + })); + this.windowConfirm = window.confirm; }, teardown: function() { @@ -105,6 +117,27 @@ asyncTest('clicking on a button with data-confirm attribute. Confirm No.', 3, fu }, 50); }); +asyncTest('clicking on a submit button with form and data-confirm attributes. Confirm No.', 3, function() { + var message; + // auto-decline: + window.confirm = function(msg) { message = msg; return false }; + + $('input[type=submit][form]') + .bind('confirm:complete', function(e, data) { + App.assertCallbackInvoked('confirm:complete'); + ok(data == false, 'confirm:complete passes in confirm answer (false)'); + }) + .bind('ajax:beforeSend', function(e, data, status, xhr) { + App.assertCallbackNotInvoked('ajax:beforeSend'); + }) + .trigger('click'); + + setTimeout(function() { + equal(message, 'Are you absolutely sure?'); + start(); + }, 50); +}); + asyncTest('binding to confirm event of a link and returning false', 1, function() { // redefine confirm function so we can make sure it's not called window.confirm = function(msg) {