Приведенный ниже код хорошо работает в 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>
Ответы:
Chrome хочет сосредоточиться на элементе управления, который является обязательным, но все еще пустым, чтобы отображалось сообщение «Пожалуйста, заполните это поле». Однако, если элемент управления скрыт в момент, когда Chrome хочет вывести сообщение, то есть во время отправки формы, Chrome не может сосредоточиться на элементе управления, потому что он скрыт, поэтому форма не будет отправлена.
Итак, чтобы обойти проблему, когда элемент управления скрыт с помощью javascript, мы также должны удалить атрибут «required» из этого элемента управления.
источник
Он покажет это сообщение, если у вас есть такой код:
решение этой проблемы будет зависеть от того, как должен работать сайт
например, если вы не хотите, чтобы форма отправлялась, если это поле не требуется, вы должны отключить кнопку отправки
поэтому код js для отображения div должен также включать кнопку отправки
вы также можете скрыть кнопку (должна быть отключена и скрыта, потому что, если она скрыта, но не отключена, пользователь может отправить форму другим способом, например, нажать
enter
в любом другом поле, но если кнопка отключена, этого не произойдетесли вы хотите, чтобы форма отправлялась, если div скрыт, вы должны отключить любой требуемый ввод внутри него и включить вводы, пока вы показываете div
если кому-то нужны коды для этого, вы должны сказать мне, что именно вам нужно
источник
Если вас не волнует проверка HTML5 (возможно, вы выполняете проверку в JS или на сервере), вы можете попробовать добавить «novalidate» в форму или элементы ввода.
источник
попробуйте использовать правильные теги для элементов управления HTML5, например для числа (целые числа)
для десятичных знаков или с плавающей запятой
step = 'Any' Без этого вы не сможете отправить свою форму, введя в поле выше любое десятичное или плавающее значение, например 3,5 или 4,6.
Попробуйте исправить шаблон, введите элементы управления HTML5, чтобы устранить эту проблему.
источник
pattern
это не кажется универсально приемлемым вtype="number"
полеЯ получал эту ошибку и определил, что на самом деле это поле, которое не было скрыто.
В данном случае это обязательное
type="number"
поле. Если в это поле никогда не вводилось никакого значения, в консоли отображается сообщение об ошибке, а форма не отправляется. Ввод значения и последующее его удаление означает, что ошибка проверки отображается должным образом.Я считаю, что это ошибка в Chrome: мой обходной путь на данный момент заключался в том, чтобы найти начальное / значение по умолчанию.
источник
У меня была ошибка:
Это происходило из-за того, что я неправильно использовал обязательное поле, которое включалось и отключалось при нажатии на флажок. Решение заключалось в том, чтобы удалить
required
атрибут, когда флажок не отмечен, и пометить его как требуемый, когда флажок был установлен.источник
Я должен сделать что - то вроде этого , чтобы исправить эту ошибку, так как у меня есть некоторые
type="number"
сmin="0.00000001"
:HTML:
JS:
Если я не установлю для всех скрытых полей ввода значение
null
chrome, все равно будет пытаться проверить ввод.источник
Никакая проверка не сделает работу.
источник
У меня была эта проблема, когда у меня был class = "hidden" в полях ввода, потому что я использовал кнопки вместо радио-маркеров и менял "активное" состояние с помощью JS ..
Я просто добавил дополнительную часть поля ввода радио той же группы, где я хотел, чтобы появилось сообщение:
два других активных маркера невидимы, этого нет, и это вызывает сообщение проверки и никаких ошибок консоли - немного взлома, но чего нет в наши дни ..
источник
эта ошибка возникает, если добавить десятичный формат. я просто добавляю
источник
Я получил это сообщение об ошибке, когда ввел число (999999), выходящее за пределы диапазона, который я установил для формы.
источник
не работал у меня, пока я не вставил весь свой код jQuery между этим:
источник
заменить
required
на required = "required"источник