Form Handler
Form handling is a common requirement in Web applications. Element's reactive system makes it easy to create dynamic, interactive forms with validation, real-time updates.
import { createEffect, createSignal, html } from "@dmnchzl/element";
interface FormData {
name: string;
email: string;
message: string;
}
function ContactForm() {
const [formData, setFormData] = createSignal<FormData>({
name: "",
email: "",
message: "",
});
const updateData = (key: string, value: string) => {
setFormData({
...formData(),
[key]: value,
});
};
const handleSubmit = (event: Event) => {
event.preventDefault();
alert(JSON.stringify(formData()));
};
return html`
<form class="container" onsubmit="${(e: Event) => handleSubmit(e)}">
<h1>Contact</h1>
<div class="form-grp">
<label for="name">Name:</label>
<input
type="text"
id="name"
value="${formData().name}"
oninput="${(e: Event) => {
updateData("name", (e.target as HTMLInputElement).value)};
}"
placeholder="John Doe"
/>
</div>
<div class="form-grp">
<label for="email">Email:</label>
<input
type="email"
id="email"
value="${formData().email}"
oninput="${(e: Event) => {
updateData("email", (e.target as HTMLInputElement).value)};
}"
placeholder="john.doe@pm.me"
/>
</div>
<div class="form-grp">
<label for="message">Message:</label>
<textarea
id="message"
value="${formData().message}"
oninput="${(e: Event) => {
updateData("message", (e.target as HTMLInputElement).value)};
}"
placeholder="Lorem ipsum dolor sit amet"
rows="4"
></textarea>
</div>
<button class="submit-btn" type="submit">Submit</button>
</form>
`;
}
document.body.appendChild(ContactForm());
Last updated