"Недопустимый контроль формы" только в Google Chrome

Код ниже хорошо работает в Safari, но в Chrome и Firefox форма не будет отправляться. Консоль Chrome регистрирует ошибку An invalid form control with name='' is not focusable. Любые идеи?

Обратите внимание, что хотя элементы управления ниже не имеют имен, они должны иметь имена во время отправки, заполненные Javascript ниже. Форма работает в 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>

Ответ 1

Chrome хочет сосредоточиться на элементе управления, который требуется, но все еще пуст, чтобы он мог вывести сообщение "Пожалуйста, заполните это поле". Однако, если элемент управления скрыт в точке, в которой Chrome хочет вывести сообщение, то есть во время отправки формы, Chrome не может сосредоточиться на элементе управления, потому что он скрыт, поэтому форма не будет отправлена.

Итак, чтобы обойти проблему, когда элемент управления скрыт от javascript, мы также должны удалить атрибут "required" из этого элемента управления.

Ответ 2

Если вы не заботитесь о проверке HTML5 (возможно, вы проверяете в JS или на сервере), вы можете попробовать добавить "novalidate" к форме или входным элементам.

Ответ 3

Он покажет это сообщение, если у вас есть такой код:

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

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

решение этой проблемы будет зависеть от того, как сайт должен работать

например, если вы не хотите, чтобы форма отправлялась, если это поле не требуется, вы должны отключить кнопку отправки

поэтому код js для отображения div должен также включить кнопку отправки

вы также можете скрыть кнопку (нужно отключить и скрывать, потому что, если она скрыта, но не отключена, пользователь может отправить форму другим способом, например, нажать enter в любом другом поле, но если кнопка отключена, это не будет случаться

если вы хотите, чтобы форма была отправлена, если div скрыт, вы должны отключить любой необходимый вход внутри него и включить входы, пока вы показываете div

Если кому-то нужны коды для этого, вы должны сказать мне, что вам нужно

Ответ 4

попробуйте использовать соответствующие теги для элементов управления HTML5 Как и для числа (целые числа)

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

для десятичных или плавающих

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

step = 'Any' Без этого вы не можете отправить свою форму, введя любое значение десятичной или плавающей позиции, например 3.5 или 4.6, в приведенном выше поле.

Попробуйте исправить шаблон, введите элементы управления HTML5, чтобы устранить эту проблему.

Ответ 5

Я получал эту ошибку и определял, что это действительно на поле, которое не было скрыто.

В этом случае это поле type="number", которое требуется. Если в это поле не было введено никаких значений, сообщение об ошибке отображается в консоли, и форма не отправляется. Ввод значения, а затем его удаление означает, что ошибка проверки отображается как ожидалось.

Я считаю, что это ошибка в Chrome. Моим обходным решением для этого было вывести начальное/стандартное значение.

Ответ 6

У меня была ошибка:

Недопустимое управление формой с помощью name= 'telefono' не является настраиваемым.

Это происходило, потому что я неправильно использовал нужное поле, которое было включено и отключено при нажатии на checkbok. Решение заключалось в том, чтобы удалить атрибут required всякий раз, когда checkbok не был помечен и пометить его как необходимо, когда отмечен флажок.

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

Ответ 7

У меня была эта проблема, когда у меня была class= "скрытая" в полях ввода, потому что я использовал кнопки вместо радиопультов - и менял "активное" состояние через JS..

Я просто добавил дополнительную часть поля ввода радиосигнала той же группы, где я хотел, чтобы сообщение появилось:

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

другие 2 активные маркеры невидимы, это не так, и это вызывает сообщение проверки и никаких ошибок в консоли - бит взлома, но что не происходит в эти дни.

Ответ 8

Мне нужно сделать что-то подобное, чтобы исправить ошибку, так как у меня есть type="number" с 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);
});

Если я не установлю все скрытое поле ввода на null, хром все равно попытается проверить ввод.

Ответ 9

эта ошибка получается, если добавить десятичный формат. я просто добавляю

step="0.1"

Ответ 10

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

не работал у меня, пока я не поместил весь код jQuery между этим:

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

Ответ 11

заменить required на обязательный = "требуется"