# Form
Kickstand UI's <ks-form>
element has all of the same behavior a standard form element has, but with some additional features that make validation and submission easier.
Most of the properties (action
, enctype
, method
, and target
) are standard form attributes and you can read more about them from the MDN documentation (opens new window).
<ks-form>
<ks-form-field label="Name" required></ks-form-field>
<ks-form-field label="Email" type="email" value="bad.email"></ks-form-field>
<ks-button type="submit">Submit Me</ks-button>
</ks-form>
# Inline Forms
Occasionally there is a need to simplify forms and combine the input and submit button into a single line.
<ks-form>
<ks-form-field label="Search" type="search" placeholder="Search..." hide-label></ks-form-field>
<ks-button type="submit">
<ks-icon icon="search" label="search"></ks-icon>
</ks-button>
</ks-form>
# Styling Forms
The form is designed to stand out from the other content in order to increase conversion. Styling forms is easy using CSS, but you can also easily do os using utility classes. The follow example removes the border, background, and padding from the form, but similar utility classes could be used to create custom form styles.
<ks-form class="p-none b-none bg-transparent" inline>
<ks-form-field label="Search" type="search" placeholder="Search..." hide-label></ks-form-field>
<ks-button type="submit">
<ks-icon icon="search" label="search"></ks-icon>
</ks-button>
</ks-form>
# Submission
In a standard HTML form, submission causes the page to reload. In Kickstand UI's forms, that behavior is prevented by default to allow for client-side validation and precessing, but if the action
property is populated, the default behavior will resume.
Forms can be submitted with a submit button, but can also be submitted programmatically using the submit
method. When executing the submit method, the form will also perform form validation and emit the submitted
event.
To collect form data easily, a custom event emitter has been added to provide field data and validation information - submitted
. Below is an example of the form data (type IFormData
) provided by the event for the form above:
{
isValid: false,
formData: {
name: "",
email: "bad.email"
},
formFieldData: [
{
name: "name",
value: "",
isValid: false,
validity: {
badInput: false,
customError: false,
patternMismatch: false,
rangeOverflow: false,
rangeUnderflow: false,
stepMismatch: false,
tooLong: false,
tooShort: false,
typeMismatch: false,
valid: false,
valueMissing: true
}
},
{
name: "email",
value: "bad.email",
isValid: false,
validity: {
badInput: false,
customError: false,
patternMismatch: false,
rangeOverflow: false,
rangeUnderflow: false,
stepMismatch: false,
tooLong: false,
tooShort: false,
typeMismatch: true,
valid: false,
valueMissing: false
},
}
]
}
# Getting Form Data
Getting this data is simple as setting up a standard event listener.
<ks-form id="my_form">
<ks-form-field label="Name" required></ks-form-field>
<ks-form-field label="Email" type="email"></ks-form-field>
<ks-button type="submit">Submit Me</ks-button>
</ks-form>
<script>
$('my_form').on('submitted', (e) => {
let myFormData = e.detail;
// do something with the form data
});
</script>
Note
If you are using a JavaScript framework, your implementation may vary. Be sure to review the documentation for event listening best practices.
This example uses Kickstand UI's DOM Utilities to help keep the code dimple and easy to read.
# Clearing Forms
When a user cancels and action, closes a modal with a form in it, or backs out of a process, you may want to reset a form so it is fresh and clean the next time the user comes to the form. You can easily do the with the clear
method. This will reset the form and restore its pristine condition.
Whenever a form is cleared or reset, you can listen for the event using the cleared
event listener.
# Validation
When the form is submitted, each of the fields will be validated. If any of the fields are invalid, the form's state will be set to "invalid" and an error message will appear at the bottom of the form. You can customize this error message using the error-message
property.
You can also manually change the validation state of you form by using the invalid
property.
WARNING
Client-side validation is not a replacement for server-side validation. Be sure that you also validate data coming from the client on the server to insure data integrity and the safety of your application.
# Accessibility
The form itself is fairly straight forward, but one point of interest for accessibility is that the form error message is using the <ks-alert>
component, which means that it has the role="alert"
as well as the aria-live="assertive"
.
The error message will also be accompanied by an icon for those users that are not able to distinguish the error from the colored text.
# Properties
Property | Attribute | Description | Type | Default |
---|---|---|---|---|
inline | inline | toggles the inline layout of the form | boolean | false |
action | action | The URL that processes the form submission. | string | undefined |
enctype | enctype | This is the MIME type of the form submission | string | 'One or more of the from fields are not valid. Please, review the form and try again.' |
errorMessage | error-message | The message that displays at the footer of the form if there is a validation problem | string | 'One or more of the from fields are not valid. Please, review the form and try again.' |
invalid | invalid | toggles the validity of the form | boolean | false |
method | method | The HTTP method to submit the form with. | "get" or "post" | undefined |
target | target | Indicates where to display the response after submitting the form. | "_blank" , "_parent" , "_self" , or "_top" | undefined |
# Events
Event | Description | Type |
---|---|---|
submitted | the event emitted when the form is submitted | CustomEvent<IFormData> |
cleared | the event emitted when the form is cleared or reset | CustomEvent |
# Methods
# clear() => Promise<void>
This will clear all form values and reset any error messages.
# Returns
Type: Promise<void>
# submit() => Promise<void>
This will perform validation and emit the submitted
event.
# Returns
Type: Promise<void>
← Tooltip Form Field →