I have a form rendered using JavaScript, but it’s not submitting. What’s going on?
There are a few things to consider when using JavaScript with a Netlify-handled form:
If you have rendered your form using JavaScript and are not using a Static Site Generator (or, your generator does not render it down to HTML such as Gatsby/React does), you will need to make sure you have a hidden, pure HTML version of your form somewhere in your site.
This means a file ending in .html that has a definition starting with <form .... and includes the data-netlify="true" attribute as laid out here. Our form-handling is only able to parse these HTML forms at deploy time to prepare our service to receive form submissions.
You don’t have to link to it - you can just create a netlifyneedsthisformyform.html file with those definitions in it and deploy it with your site.
If you have defined your form using JavaScript, but are not using JavaScript to submit the form, you will need to add the following hidden field as laid out here:
where the value is the name of your specific form.
This is necessary to enable correct form submissions on top of the static HTML version of the form. The form-name hidden field tells our system the name of the form where the submission originated. Unless you have explicitly provided the form-name in your JavaScript, you will need to provide it as described above because our system is unable to add it onto JavaScript rendered forms.
If you are using JavaScript to submit your form, you’ll need to make sure that the form data being sent has the exact same fields (the name=, including spelling and punctuation, must be identical) as in the HTML version. Don’t forget to include the form-name field as mentioned above!
JavaScript opens up a lot of possibilities; awesome, right?
If you have any other questions, please leave us a comment below
Update - setting the resource/url parameter for fetch() to the active redirect base successfully records the form submission in Netlify: fetch('/en', ...)
Hi! thanks for the post. I’m able to submit via JS fetch() (without a honeypot field even), but when I enable the following language based redirects the submissions don’t go through. Any thoughts? Thanks!
Could you link us to your form in production so we can see it in action, @evvvritt ? Hard to tell what is happening without more context - such as the meaning of “don’t go through” - HTTP 404? missing submissions? Empty submissions?
Knowing where to find your form would help us out a lot. If you don’t want to post the URL here, you could say “netlify site ID # X and the form is at /path on deploy ID Y”. You can find the site ID on the general settings page, and the deploy ID will be in the URL from the logs for the deploy you were testing on (last component: Netlify App).
Hello, I´m deploying my first site through Netlify these days. I´m currently having a html form that gets some additional select/option elements from the DOM depending on what they have searched on. My form submits to Netlify, but I cant get the additional JS elements to submit its value and I dont get where I should add the <input type="hidden" name="form-name" value="contact" /> as stated above. What am I missing?
Hi, @NikolaiLadeklar, when a site is deployed with our service there is post processing which occurs. During this post processing any HTML <form> tags are processed and a backend handler is created to receive the form submisstions.
The handlers will only access fields defined in the HTML it processed. All other fields are silently dropped.
The solution for this is to have the HTML version of the form contain all possible fields. If this is done, the handler will be able to accept all field. Missing fields are allow but undefined fields are ignored.
If there are other questions about this, please let us know.
I have a stateful react form with a static html hidden form, and all my fields are submitting successful except for one, which uses props to pass data into the value. Please check it out at this thread => Pass a hidden input value with stateful React form