T09: Forms and Dialog
HTML forms collect data, but JavaScript validates and processes it. The dialog element gives you native modal windows without any library. Together they create a smooth data collection experience - like a smart receptionist who checks your paperwork before filing it.
JavaScript Form Validation
While HTML has built-in validation (required, type), JavaScript gives you full control over validation logic and custom error messages.
const form = document.querySelector("#myForm");
form.addEventListener("submit", function(event) {
const email = form.querySelector("#email").value;
if (!email.includes("@")) {
event.preventDefault();
showError("Please enter a valid email address.");
}
});
function showError(message) {
const errorDiv = document.querySelector(".error");
errorDiv.textContent = message;
errorDiv.style.display = "block";
}
The Dialog Element
The <dialog> element provides native modal and non-modal dialogs. Use showModal() for modals with backdrop, or show() for non-modal.
<dialog id="confirm">
<p>Are you sure?</p>
<button id="yes">Yes</button>
<button id="no">No</button>
</dialog>
<script>
const dialog = document.querySelector("#confirm");
dialog.showModal();
dialog.querySelector("#no").addEventListener("click", () => dialog.close());
</script>
flowchart TD
A[User submits form] --> B{JS Validation}
B -->|Invalid| C[Show error message]
C --> A
B -->|Valid| D{Needs confirmation?}
D -->|Yes| E[Open dialog]
E --> F{User confirms?}
F -->|Yes| G[Process data]
F -->|No| A
D -->|No| G
Key Takeaways
- JavaScript validation gives you custom logic beyond HTML5 built-in validation
- The dialog element provides native modal windows without external libraries
- Use showModal() for modal dialogs and show() for non-modal ones
- Always provide clear error messages that tell users how to fix the problem