Loading...
Please waitLoading...
Please waitSubmit form when pressing Enter — but only if valid. Automatically handles form validation before submission.
pnpm dlx uselab@latest add use-on-enter-submit
import * as React from "react"
import { useOnEnterSubmit } from "@/hooks/use-on-enter-submit"
function ContactForm() {
const formRef = React.useRef<HTMLFormElement>(null)
const [email, setEmail] = React.useState("")
const [message, setMessage] = React.useState("")
const handleSubmit = () => {
console.log("Form submitted:", { email, message })
}
useOnEnterSubmit(formRef, handleSubmit)
return (
<form ref={formRef}>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
<textarea
value={message}
onChange={(e) => setMessage(e.target.value)}
required
/>
<button type="submit">Submit</button>
</form>
)
}The hook automatically:
useOnEnterSubmit(ref, submit, options?)| Parameter | Type | Description |
|---|---|---|
ref | React.RefObject<HTMLFormElement | HTMLInputElement | HTMLTextAreaElement> | React ref to the form element or any input/textarea within the form. |
submit | () => void | Function to call when Enter is pressed and the form is valid. |
options | UseOnEnterSubmitOptions | Optional configuration object (see below). |
| Name | Type | Description | Default |
|---|---|---|---|
preventDefault | boolean | Whether to prevent default form submission behavior. | true |
checkValidity | boolean | Whether to check form validity before submitting. | true |
This hook returns void.
import { useForm } from "react-hook-form"
import { useOnEnterSubmit } from "@/hooks/use-on-enter-submit"
function MyForm() {
const formRef = React.useRef<HTMLFormElement>(null)
const form = useForm()
const onSubmit = (data: any) => {
console.log("Submitted:", data)
}
const handleEnterSubmit = () => {
form.handleSubmit(onSubmit)()
}
useOnEnterSubmit(formRef, handleEnterSubmit)
return (
<form ref={formRef} onSubmit={form.handleSubmit(onSubmit)}>
{/* form fields */}
</form>
)
}function CustomForm() {
const formRef = React.useRef<HTMLFormElement>(null)
const [errors, setErrors] = React.useState<Record<string, string>>({})
const validate = () => {
// Your custom validation logic
const newErrors: Record<string, string> = {}
// ... validation
setErrors(newErrors)
return Object.keys(newErrors).length === 0
}
const handleSubmit = () => {
if (validate()) {
console.log("Form is valid, submitting...")
}
}
useOnEnterSubmit(formRef, handleSubmit, { checkValidity: false })
return <form ref={formRef}>{/* form fields */}</form>
}function MyForm() {
const formRef = React.useRef<HTMLFormElement>(null)
const handleSubmit = () => {
// Custom submission logic
}
// Allow default form submission behavior
useOnEnterSubmit(formRef, handleSubmit, { preventDefault: false })
return <form ref={formRef}>{/* form fields */}</form>
}required, pattern, type="email", etc.)