Skip to content

Commit d99128b

Browse files
committed
feat(ngForm): add ngSubmit support
fire 'submit' event when submit buttons are clicked in an ngForm (since ngForms don't automatically fire the 'submit' event) Closes angular#2513
1 parent 3661bab commit d99128b

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/ng/directive/form.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,14 @@ var formDirectiveFactory = function(isNgForm) {
330330

331331
addEventListenerFn(formElement[0], 'submit', preventDefaultListener);
332332

333+
if(isNgForm && formElement.children('input[type=submit]')) {
334+
if(formElement.children('input[type=submit]')) {
335+
formElement.children('input[type=submit]').on('click', function() {
336+
formElement.trigger('submit');
337+
});
338+
}
339+
}
340+
333341
// unregister the preventDefault listener so that we don't not leak memory but in a
334342
// way that will achieve the prevention of the default action.
335343
formElement.on('$destroy', function() {

test/ng/directive/formSpec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,22 @@ describe('form', function() {
148148
}).toThrowMinErr('ng', 'badname');
149149
});
150150

151+
it('should trigger "submit" event for ngForm when clicking inputs with type="submit"', function() {
152+
var callback = jasmine.createSpy('submit').andCallFake(function(event) {
153+
expect(event.isDefaultPrevented()).toBe(false);
154+
event.preventDefault();
155+
});
156+
157+
doc = $compile('<div ng-form="form">'+
158+
'<input name="some" ng-model="some" />'+
159+
'<input type="submit" value="Submit" />'+
160+
'</div>')(scope);
161+
doc.on('submit', callback);
162+
163+
browserTrigger(doc.find('input[type=submit]'), 'click');
164+
expect(callback).toHaveBeenCalledOnce();
165+
});
166+
151167

152168
describe('preventing default submission', function() {
153169

0 commit comments

Comments
 (0)