diff --git a/packages/base/src/features/InputElementsFormSupport.ts b/packages/base/src/features/InputElementsFormSupport.ts index e18f94288180..6c0cb3e1a094 100644 --- a/packages/base/src/features/InputElementsFormSupport.ts +++ b/packages/base/src/features/InputElementsFormSupport.ts @@ -42,7 +42,18 @@ const setFormValidity = async (element: IFormInputElement) => { }; const submitForm = (element: UI5Element) => { - element._internals?.form?.requestSubmit(); + const formElements = element._internals?.form?.elements; + // @ts-expect-error + const submitElement = Array.from(formElements).find(el => { + // @ts-expect-error + return el.matches(`button:not([type]), button[type="submit"], input[type="submit"], input[type="image"]`) || (el.matches("[ui5-button]") && el._isSubmit); + }); + + if (submitElement && formElements?.length !== 1) { + element._internals?.form?.requestSubmit(); + } else if (formElements?.length === 1) { + element._internals?.form?.requestSubmit(); + } }; const resetForm = (element: UI5Element) => { diff --git a/packages/main/src/Input.ts b/packages/main/src/Input.ts index 0b45e9194712..70c5555d3a39 100644 --- a/packages/main/src/Input.ts +++ b/packages/main/src/Input.ts @@ -853,11 +853,9 @@ class Input extends UI5Element implements SuggestionComponent, IFormInputElement if (isEnter(e)) { const isValueUnchanged = this.previousValue === this.getInputDOMRefSync()!.value; - const shouldSubmit = this._internals.form && this._internals.form.querySelectorAll("[ui5-input]").length === 1; - this._enterKeyDown = true; - if (isValueUnchanged && shouldSubmit) { + if (isValueUnchanged) { submitForm(this); } @@ -1156,8 +1154,6 @@ class Input extends UI5Element implements SuggestionComponent, IFormInputElement } _handleChange() { - const shouldSubmit = this._internals.form && this._internals.form.querySelectorAll("[ui5-input]").length === 1; - if (this._clearIconClicked) { this._clearIconClicked = false; return; @@ -1179,7 +1175,7 @@ class Input extends UI5Element implements SuggestionComponent, IFormInputElement } else { fireChange(); - if (this._enterKeyDown && shouldSubmit) { + if (this._enterKeyDown) { submitForm(this); } } diff --git a/packages/main/test/pages/FormSupport2.html b/packages/main/test/pages/FormSupport2.html new file mode 100644 index 000000000000..1edd53830e78 --- /dev/null +++ b/packages/main/test/pages/FormSupport2.html @@ -0,0 +1,221 @@ + + + + + + + Form ENTER Behavior Test + + + + + + +

Form ENTER Key Behavior Test

+

Try pressing ENTER while focused on different input fields to see when forms submit.

+
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + + +
+
+ +
+
+ + + +
+
+ +
+
+ + + + +
+
+ +
+
+ + + +
+ +
+
+ + + + +
+ +
+
+ + + + +
+ +
+
+ + + + +
+
+ +
+
Event log will appear here...
+
+ + + + + + \ No newline at end of file