Tailwind CSS Contact Request Ajax Form
Contact form that doesn't require page refresh. jQuery >= v1.6 example.<div class="w-full md:w-96 md:max-w-full mx-auto">
<div class="p-6 border border-gray-300 sm:rounded-md">
<form id="contact-form" method="POST" action="https://herotofu.com/start">
<label class="block mb-6">
<span class="text-gray-700">Your name</span>
<input
type="text"
name="name"
class="
block
w-full
mt-1
border-gray-300
rounded-md
shadow-sm
focus:border-indigo-300
focus:ring
focus:ring-indigo-200
focus:ring-opacity-50
"
placeholder="Joe Bloggs"
/>
</label>
<label class="block mb-6">
<span class="text-gray-700">Email address</span>
<input
name="email"
type="email"
class="
block
w-full
mt-1
border-gray-300
rounded-md
shadow-sm
focus:border-indigo-300
focus:ring
focus:ring-indigo-200
focus:ring-opacity-50
"
placeholder="[email protected]"
required
/>
</label>
<label class="block mb-6">
<span class="text-gray-700">Message</span>
<textarea
name="message"
class="
block
w-full
mt-1
border-gray-300
rounded-md
shadow-sm
focus:border-indigo-300
focus:ring
focus:ring-indigo-200
focus:ring-opacity-50
"
rows="3"
placeholder="Tell us what you're thinking about..."
></textarea>
</label>
<div class="mb-6">
<button
id="form-submit"
type="submit"
class="
h-10
px-5
text-indigo-100
bg-indigo-700
rounded-lg
transition-colors
duration-150
focus:shadow-outline
hover:bg-indigo-800
"
>
Contact Us
</button>
</div>
<div>
<div class="mt-2 text-gray-700 text-right text-xs">
by
<a href="https://herotofu.com" class="hover:underline" target="_blank"
>HeroTofu</a
>
</div>
</div>
</form>
</div>
</div>
<script>
$('#contact-form').submit(function (e) {
e.preventDefault();
var $form = $(this),
$formSubmit = $('#form-submit'),
formArray = $form.serializeArray(),
data = {};
$formSubmit.attr('disabled', 'disabled').text('Loading...');
for (var i = 0; i < formArray.length; i++) {
data[formArray[i].name] = formArray[i].value;
}
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: $form.attr('action'),
data: JSON.stringify(data),
}).always(function (data) {
if (data.status === 422) {
alert('Ajax requests do not support captcha. Please turn it off.');
$formSubmit
.parent()
.html('<strong>Error, failed to send the message!</strong>');
}
if (data.status !== 200) {
alert('Error: ' + data.statusText + ' (' + data.status + ')');
$formSubmit
.parent()
.html('<strong>Error, failed to send the message!</strong>');
}
$formSubmit.parent().html('Thank you for contacting us!');
});
});
</script>
/* The following CSS is used only for the preview,
please don't copy it to your production code */
body { padding: 2rem 0; }The provided tailwind example use tailwindcss/forms plugin.
Frequently Asked Questions
Can I use it freely in a commercial project?
Yes! Attribution is welcomed but not required. The only caveat is that you can't re-sell this code directly as a standalone component.
Why is it free?
It's free because HeroTofu gets revenue from form submissions handling rather than forms themselves.
I've copied the form code. What are the next steps?
You should connect your form to the backend to store submissions. Subjectively the best way to do so is to navigate to https://herotofu.com/start 🙂
Who's behind HeroTofu?
Munero Company operates HeroTofu. It's incorporated in the EU 🇪🇺
HeroTofu is a set of tools and APIs designed to help Developers and Marketers.
© 2026 HeroTofu by Munero
