"Invalid form control" only in Google Chrome

HtmlGoogle Chrome

Html Problem Overview


The code below works well in Safari but in Chrome and Firefox the form will not submit. Chrome console logs the error An invalid form control with name='' is not focusable. Any ideas?

Note that whilst the controls below do not have names, they should have names at the time of submission, populated by the Javascript below. The form DOES work in Safari.

<form method="POST" action="/add/bundle"> 
<p> 
	<input type="text" name="singular" placeholder="Singular Name" required> 
	<input type="text" name="plural" placeholder="Plural Name" required> 
</p> 
<h4>Asset Fields</h4> 
<div class="template-view" id="template_row" style="display:none"> 
    <input type="text" data-keyname="name" placeholder="Field Name" required> 
    <input type="text" data-keyname="hint" placeholder="Hint"> 
    <select data-keyname="fieldtype" required> 
        <option value="">Field Type...</option> 
        <option value="Email">Email</option> 
        <option value="Password">Password</option> 
        <option value="Text">Text</option> 
    </select>    
    <input type="checkbox" data-keyname="required" value="true"> Required
    <input type="checkbox" data-keyname="search" value="true"> Searchable
    <input type="checkbox" data-keyname="readonly" value="true"> ReadOnly
    <input type="checkbox" data-keyname="autocomplete" value="true"> AutoComplete
    <input type="radio" data-keyname="label" value="label" name="label"> Label
    <input type="radio" data-keyname="unique" value="unique" name="unique"> Unique
    <button class="add" type="button">+</button> 
    <button class="remove" type="button">-</button> 
</div> 
 
<div id="target_list"></div> 
    <p><input type="submit" name="form.submitted" value="Submit" autofocus></p> 
</form>

<script> 
function addDiv()
{
    var pCount = $('.template-view', '#target_list').length;
    var pClone = $('#template_row').clone();
    $('select, input, textarea', pClone).each(function(idx, el){
        $el = $(this);
        if ((el).type == 'radio'){
            $el.attr('value', pCount + '_' + $el.data('keyname'));
        }
        else {
            $el.attr('name', pCount + '_' + $el.data('keyname'));
        };
    });
    $('#target_list').append(pClone);
    pClone.show();
}
 
function removeDiv(elem){
    var pCount = $('.template-view', '#target_list').length;
    if (pCount != 1)
    {
        $(elem).closest('.template-view').remove();
    }
};
 
$('.add').live('click', function(){
    addDiv();
});
 
$('.remove').live('click', function(){
    removeDiv(this);
});
 
$(document).ready(addDiv);
 
</script>

Html Solutions


Solution 1 - Html

Chrome wants to focus on a control that is required but still empty so that it can pop up the message 'Please fill out this field'. However, if the control is hidden at the point that Chrome wants to pop up the message, that is at the time of form submission, Chrome can't focus on the control because it is hidden, therefore the form won't submit.

So, to get around the problem, when a control is hidden by javascript, we also must remove the 'required' attribute from that control.

Solution 2 - Html

It will show that message if you have code like this:

<form>
  <div style="display: none;">
    <input name="test" type="text" required/>
  </div>

  <input type="submit"/>
</form>

solution to this problem will depend on how the site should work

for example if you don't want the form to submit unless this field is required you should disable the submit button

so the js code to show the div should enable the submit button as well

you can hide the button too (should be disabled and hidden because if it's hidden but not disabled the user can submit the form with others way like press enter in any other field but if the button is disabled this won't happen

if you want the form to submit if the div is hidden you should disable any required input inside it and enable the inputs while you are showing the div

if someone need the codes to do so you should tell me exactly what you need

Solution 3 - Html

If you don't care about HTML5 validation (maybe you are validating in JS or on the server), you could try adding "novalidate" to the form or the input elements.

Solution 4 - Html

try to use proper tags for HTML5 controls Like for Number(integers)

<input type='number' min='0' pattern ='[0-9]*' step='1'/>

for Decimals or float

 <input type='number' min='0' step='Any'/>

step='Any' Without this you cannot submit your form entering any decimal or float value like 3.5 or 4.6 in the above field.

Try fixing the pattern , type for HTML5 controls to fix this issue.

Solution 5 - Html

I was getting this error, and determined it was actually on a field that was not hidden.

In this case, it was a type="number" field, that is required. When no value has ever been entered into this field, the error message is shown in the console, and the form is not submitted. Entering a value, and then removing it means that the validation error is shown as expected.

I believe this is a bug in Chrome: my workaround for now was to come up with an initial/default value.

Solution 6 - Html

I have to do something like this to fix the bug, since I have some type="number" with min="0.00000001":

###HTML:

<input type="number" min="0.00000001" step="0.00000001" name="price" value="[%price%]" />

###JS:

$('input[type="submit"]').click(function(e) {
	//prevent chrome bug
	$("input:hidden").val(null);
});

If I don't set all hidden input field to null chrome will still try to validate the input.

Solution 7 - Html

I had the error: > An invalid form control with name='telefono' is not focusable.

This was happening because I was not using the required field correctly, which enabled and disabled when clicking on a checkbok. The solution was to remove the required attribute whenever the checkbok was not marked and mark it as required when the checkbox was marked.

var telefono = document.getElementById("telefono");  
telefono.removeAttribute("required");

Solution 8 - Html

No validate will do the job.

<form action="whatever" method="post" novalidate>

Solution 9 - Html

I had this issue when I had class="hidden" on the input fields because I was using buttons instead of radio bullets - and changing the "active" state via JS..

I simply added an extra radio input field part of the same group where i wanted the msg to appear:

<input type="radio" id="thenorm" name="ppoption" value=""  required style="opacity:0"/>

the other 2 active bullets are invisible, this one isnt and this triggers the validation message and no console errors - bit of a hack but what isnt these days..

Solution 10 - Html

this error get if add decimal format. i just add

step="0.1"

Solution 11 - Html

I got this error message when I entered a number (999999) that was out of the range I'd set for the form.

<input type="number" ng-model="clipInMovieModel" id="clipInMovie" min="1" max="10000">

Solution 12 - Html

$("...").attr("required"); and $("...").removeAttr("required"); 

didn't work for me until I putted all my jQuery code between that:

$(document).ready(function() {
    //jQuery code goes here
});

Solution 13 - Html

replace required by required="required"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMFBView Question on Stackoverflow
Solution 1 - HtmlMFBView Answer on Stackoverflow
Solution 2 - HtmlRobertView Answer on Stackoverflow
Solution 3 - HtmlJohn VelonisView Answer on Stackoverflow
Solution 4 - HtmlsudhAnsu63View Answer on Stackoverflow
Solution 5 - HtmlMatthew SchinckelView Answer on Stackoverflow
Solution 6 - HtmlDalin HuangView Answer on Stackoverflow
Solution 7 - HtmlfatandazView Answer on Stackoverflow
Solution 8 - HtmlHassiView Answer on Stackoverflow
Solution 9 - HtmlFstarocka BurnsView Answer on Stackoverflow
Solution 10 - HtmlРоман ЗыковView Answer on Stackoverflow
Solution 11 - HtmlThomas David KehoeView Answer on Stackoverflow
Solution 12 - HtmlFédi BELKACEMView Answer on Stackoverflow
Solution 13 - HtmlWebodreyView Answer on Stackoverflow