From 04be9fb73c7e0152e80d5c5951a48a76223cf0ec Mon Sep 17 00:00:00 2001 From: andytompkins Date: Sun, 16 Mar 2014 15:53:10 -0700 Subject: [PATCH 1/4] Fixed ng-form so that it triggers submit and click events like a normal form --- src/ng/directive/form.js | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/ng/directive/form.js b/src/ng/directive/form.js index 1424157c8751..568a2e1ce39c 100644 --- a/src/ng/directive/form.js +++ b/src/ng/directive/form.js @@ -411,6 +411,67 @@ var formDirectiveFactory = function(isNgForm) { extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards }); } + + if (isNgForm) { + var inputs = formElement.find('input'); + var buttons = [], submits = [], others = []; + for (var i = 0; i < inputs.length; i++) { + var elem = angular.element(inputs[i]); + var elemType = elem.attr('type'); + if (elemType) { + if ('button' === elemType.toLowerCase()) { + buttons.push(elem); + } else if ('submit' === elemType.toLowerCase()) { + submits.push(elem); + } else { + others.push(elem); + } + } else { + others.push(elem); + } + } + + var submitElem = null; + if (submits.length) { + submitElem = submits[0]; + } else if (buttons.length) { + submitElem = buttons[0]; + } + + if (submitElem) { + addEventListenerFn(submitElem[0], 'click', function(event) { + formElement.triggerHandler('submit'); + }); + } + + if (inputs.length === 1) { + /* + * - If a form has only one input field then hitting enter in this field triggers form submit + * (`ngSubmit`) + */ + var singleInput = angular.element(inputs[0]); + addEventListenerFn(singleInput[0], 'keyup', function(event) { + if (event.which === 13) { + formElement.triggerHandler('submit'); + } + }); + } else if (others.length && (buttons.length + submits.length)) { + /* + * - if a form has one or more input fields and one or more buttons or input[type=submit] then + * hitting enter in any of the input fields will trigger the click handler on the *first* button or + * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) + */ + for (i = 0; i < others.length; i++) { + var otherElem = others[i]; + addEventListenerFn(otherElem[0], 'keyup', function(event) { + if (event.which === 13) { + submitElem.triggerHandler('click'); + formElement.triggerHandler('submit'); + } + }); + } + } + } } }; } From d5e497ac0baa1bc7df72e70c2a8e814f7034e738 Mon Sep 17 00:00:00 2001 From: andytompkins Date: Sun, 16 Mar 2014 16:13:09 -0700 Subject: [PATCH 2/4] Fixed indentation --- src/ng/directive/form.js | 118 ++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 58 deletions(-) diff --git a/src/ng/directive/form.js b/src/ng/directive/form.js index 568a2e1ce39c..733e0682dcdf 100644 --- a/src/ng/directive/form.js +++ b/src/ng/directive/form.js @@ -413,64 +413,66 @@ var formDirectiveFactory = function(isNgForm) { } if (isNgForm) { - var inputs = formElement.find('input'); - var buttons = [], submits = [], others = []; - for (var i = 0; i < inputs.length; i++) { - var elem = angular.element(inputs[i]); - var elemType = elem.attr('type'); - if (elemType) { - if ('button' === elemType.toLowerCase()) { - buttons.push(elem); - } else if ('submit' === elemType.toLowerCase()) { - submits.push(elem); - } else { - others.push(elem); - } - } else { - others.push(elem); - } - } - - var submitElem = null; - if (submits.length) { - submitElem = submits[0]; - } else if (buttons.length) { - submitElem = buttons[0]; - } - - if (submitElem) { - addEventListenerFn(submitElem[0], 'click', function(event) { - formElement.triggerHandler('submit'); - }); - } - - if (inputs.length === 1) { - /* - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - */ - var singleInput = angular.element(inputs[0]); - addEventListenerFn(singleInput[0], 'keyup', function(event) { - if (event.which === 13) { - formElement.triggerHandler('submit'); - } - }); - } else if (others.length && (buttons.length + submits.length)) { - /* - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - */ - for (i = 0; i < others.length; i++) { - var otherElem = others[i]; - addEventListenerFn(otherElem[0], 'keyup', function(event) { - if (event.which === 13) { - submitElem.triggerHandler('click'); - formElement.triggerHandler('submit'); - } - }); - } - } + var inputs = formElement.find('input'); + var buttons = [], + submits = [], + others = []; + for (var i = 0; i < inputs.length; i++) { + var elem = angular.element(inputs[i]); + var elemType = elem.attr('type'); + if (elemType) { + if ('button' === elemType.toLowerCase()) { + buttons.push(elem); + } else if ('submit' === elemType.toLowerCase()) { + submits.push(elem); + } else { + others.push(elem); + } + } else { + others.push(elem); + } + } + + var submitElem = null; + if (submits.length) { + submitElem = submits[0]; + } else if (buttons.length) { + submitElem = buttons[0]; + } + + if (submitElem) { + addEventListenerFn(submitElem[0], 'click', function(event) { + formElement.triggerHandler('submit'); + }); + } + + if (inputs.length === 1) { + /* + * - If a form has only one input field then hitting enter in this field triggers form submit + * (`ngSubmit`) + */ + var singleInput = angular.element(inputs[0]); + addEventListenerFn(singleInput[0], 'keyup', function(event) { + if (event.which === 13) { + formElement.triggerHandler('submit'); + } + }); + } else if (others.length && (buttons.length + submits.length)) { + /* + * - if a form has one or more input fields and one or more buttons or input[type=submit] then + * hitting enter in any of the input fields will trigger the click handler on the *first* button or + * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) + */ + for (i = 0; i < others.length; i++) { + var otherElem = others[i]; + addEventListenerFn(otherElem[0], 'keyup', function(event) { + if (event.which === 13) { + submitElem.triggerHandler('click'); + formElement.triggerHandler('submit'); + } + }); + } + } } } }; From 2a02a4ab4153e46cec39c058eeb0660626448df2 Mon Sep 17 00:00:00 2001 From: andytompkins Date: Sun, 16 Mar 2014 16:45:29 -0700 Subject: [PATCH 3/4] Added button elements to the list of things which can trigger submit --- src/ng/directive/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ng/directive/form.js b/src/ng/directive/form.js index 733e0682dcdf..e66d398aabce 100644 --- a/src/ng/directive/form.js +++ b/src/ng/directive/form.js @@ -413,10 +413,10 @@ var formDirectiveFactory = function(isNgForm) { } if (isNgForm) { - var inputs = formElement.find('input'); var buttons = [], submits = [], others = []; + var inputs = formElement[0].querySelectorAll('input, button'); for (var i = 0; i < inputs.length; i++) { var elem = angular.element(inputs[i]); var elemType = elem.attr('type'); From 242f160333949148fbe47aac1db6a0acc6a46da4 Mon Sep 17 00:00:00 2001 From: andytompkins Date: Sun, 16 Mar 2014 17:05:21 -0700 Subject: [PATCH 4/4] Fixing indentation and spacing problems --- src/ng/directive/form.js | 124 +++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/src/ng/directive/form.js b/src/ng/directive/form.js index e66d398aabce..4e77af0d0803 100644 --- a/src/ng/directive/form.js +++ b/src/ng/directive/form.js @@ -412,68 +412,68 @@ var formDirectiveFactory = function(isNgForm) { }); } - if (isNgForm) { - var buttons = [], - submits = [], - others = []; - var inputs = formElement[0].querySelectorAll('input, button'); - for (var i = 0; i < inputs.length; i++) { - var elem = angular.element(inputs[i]); - var elemType = elem.attr('type'); - if (elemType) { - if ('button' === elemType.toLowerCase()) { - buttons.push(elem); - } else if ('submit' === elemType.toLowerCase()) { - submits.push(elem); - } else { - others.push(elem); - } - } else { - others.push(elem); - } - } - - var submitElem = null; - if (submits.length) { - submitElem = submits[0]; - } else if (buttons.length) { - submitElem = buttons[0]; - } - - if (submitElem) { - addEventListenerFn(submitElem[0], 'click', function(event) { - formElement.triggerHandler('submit'); - }); - } - - if (inputs.length === 1) { - /* - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - */ - var singleInput = angular.element(inputs[0]); - addEventListenerFn(singleInput[0], 'keyup', function(event) { - if (event.which === 13) { - formElement.triggerHandler('submit'); - } - }); - } else if (others.length && (buttons.length + submits.length)) { - /* - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - */ - for (i = 0; i < others.length; i++) { - var otherElem = others[i]; - addEventListenerFn(otherElem[0], 'keyup', function(event) { - if (event.which === 13) { - submitElem.triggerHandler('click'); - formElement.triggerHandler('submit'); - } - }); - } - } - } + if (isNgForm) { + var buttons = [], + submits = [], + others = []; + var inputs = formElement[0].querySelectorAll('input, button'); + for (var i = 0; i < inputs.length; i++) { + var elem = angular.element(inputs[i]); + var elemType = elem.attr('type'); + if (elemType) { + if ('button' === elemType.toLowerCase()) { + buttons.push(elem); + } else if ('submit' === elemType.toLowerCase()) { + submits.push(elem); + } else { + others.push(elem); + } + } else { + others.push(elem); + } + } + + var submitElem = null; + if (submits.length) { + submitElem = submits[0]; + } else if (buttons.length) { + submitElem = buttons[0]; + } + + if (submitElem) { + addEventListenerFn(submitElem[0], 'click', function(event) { + formElement.triggerHandler('submit'); + }); + } + + if (inputs.length === 1) { + /* + * - If a form has only one input field then hitting enter in this field triggers form submit + * (`ngSubmit`) + */ + var singleInput = angular.element(inputs[0]); + addEventListenerFn(singleInput[0], 'keyup', function(event) { + if (event.which === 13) { + formElement.triggerHandler('submit'); + } + }); + } else if (others.length && (buttons.length + submits.length)) { + /* + * - if a form has one or more input fields and one or more buttons or input[type=submit] then + * hitting enter in any of the input fields will trigger the click handler on the *first* button or + * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) + */ + for (i = 0; i < others.length; i++) { + var otherElem = others[i]; + addEventListenerFn(otherElem[0], 'keyup', function(event) { + if (event.which === 13) { + submitElem.triggerHandler('click'); + formElement.triggerHandler('submit'); + } + }); + } + } + } } }; }