У меня острая проблема на моем сайте. В Google Chrome некоторые клиенты не могут перейти на мою страницу оплаты. При попытке отправить форму я получаю эту ошибку:
An invalid form control with name='' is not focusable.
Это из консоли JavaScript.
Я прочитал, что проблема может быть из-за скрытых полей, имеющих обязательный атрибут. Теперь проблема в том, что мы используем валидаторы обязательных полей .net webforms, а не обязательный атрибут html5.
Кажется случайным, кто получает эту ошибку. Есть кто-нибудь, кто знает решение для этого?
html
validation
mp1990
источник
источник
Ответы:
Эта проблема возникает в Chrome, если поле формы не проходит проверку, но из-за того, что соответствующий недействительный элемент управления не может быть сфокусирован, попытка браузера отобразить сообщение «Пожалуйста, заполните это поле» рядом с ним также не удалась.
Элемент управления формы может быть не фокусируемым во время запуска проверки по нескольким причинам. Два сценария, описанные ниже, являются наиболее заметными причинами:
Поле не имеет значения в соответствии с текущим контекстом бизнес-логики. В таком случае соответствующий элемент управления должен быть удален из DOM или не должен быть помечен
required
атрибутом в этой точке.Преждевременная проверка может произойти из-за нажатия пользователем клавиши ВВОД на входе. Или пользователь нажимает на кнопку / элемент управления вводом в форме, которая не определила
type
атрибут элемента управления правильно. Если для атрибута типа кнопки не задано значениеbutton
, Chrome (или любой другой браузер в этом отношении) выполняет проверку каждый раз, когда нажимается кнопка, посколькуsubmit
это значение по умолчанию дляtype
атрибута кнопки .Чтобы решить эту проблему, если у вас есть кнопка на странице , что делает что - то другое, кроме отправить или сброса , всегда помните , чтобы сделать это:
<button type="button">
.Также см. Https://stackoverflow.com/a/7264966/1356062
источник
required
или добавлениеnovalidate
никогда не являются хорошим решением.number
поле, в котором значение по умолчанию не делилось равномерно на размер шага. Изменение размера шага решило проблему.Добавление
novalidate
атрибута в форму поможет:источник
<fieldset>
В вашем
form
, вы могли бы скрыть,input
имеяrequired
атрибут:<input type="hidden" required />
<input type="file" required style="display: none;"/>
form
Не может сосредоточиться на тех элементах, вы должны удалитьrequired
из всех скрытых входов, или реализовать функцию проверки в JavaScript , чтобы справиться с ними , если вы действительно требуете скрытого входа.источник
required
.pattern
один может вызвать эту проблему.<input type="hidden" required />
и с другой<input type="text" style="display: none" required />
, и единственное, что отображает ошибку в Chrome - этоdisplay: none
, а"hidden"
другая отправляет нормально.В случае, если кто-то еще имеет эту проблему, я испытал то же самое. Как обсуждалось в комментариях, это было связано с попыткой браузера проверить скрытые поля. Он находил пустые поля в форме и пытался сфокусироваться на них, но поскольку они были установлены
display:none;
, он не мог. Отсюда и ошибка.Я смог решить это с помощью чего-то похожего на это:
Кроме того, это, возможно, дубликат «Неверный контроль формы» только в Google Chrome
источник
В моем случае проблема заключалась в том,
input type="radio" required
что скрывали:visibility: hidden;
Это сообщение об ошибке также покажет, является ли требуемый тип ввода
radio
илиcheckbox
имеетdisplay: none;
свойство CSS.Если вы хотите создать пользовательские входы радио / чекбокса, где они должны быть скрыты от пользовательского интерфейса и при этом сохранить
required
атрибут, вы должны вместо этого использовать:opacity: 0;
Свойство CSSисточник
name=""
вместо исходного?Ни один из предыдущих ответов не работал для меня, и у меня нет скрытых полей с
required
атрибутом.В моем случае проблема была вызвана наличием a
<form>
и затем a в<fieldset>
качестве первого дочернего элемента, который содержит атрибут<input>
withrequired
. Удаление<fieldset>
решенной проблемы. Или вы можете обернуть свою форму с ним; это разрешено HTML5.Я на Windows 7 x64, версия Chrome 43.0.2357.130 m.
источник
Еще одна возможность, если вы получаете ошибку на входе флажка. Если в ваших флажках используется пользовательский CSS, который скрывает значение по умолчанию и заменяет его другим стилем, это также вызовет не фокусируемую ошибку в Chrome при ошибке проверки.
Я нашел это в моей таблице стилей:
Простым исправлением было заменить его следующим:
источник
Возможно, у вас есть скрытые (display: none) поля с обязательным атрибутом.
Пожалуйста, проверьте все обязательные поля видны пользователю :)
источник
Для меня это происходит, когда есть
<select>
поле с предварительно выбранной опцией со значением '':К сожалению, это единственное кросс-браузерное решение для заполнителя ( Как мне создать заполнитель для поля «Выбрать»? ).
Проблема возникает на Chrome 43.0.2357.124.
источник
Если у вас есть поле с обязательным атрибутом, которое не отображается при отправке формы, эта ошибка будет выдана. Вы просто удаляете обязательный атрибут, когда пытаетесь скрыть это поле. Вы можете добавить обязательный атрибут на тот случай, если хотите снова отобразить поле. Таким образом, ваша проверка не будет скомпрометирована и в то же время ошибка не будет выдана.
источник
$("input").attr("required", "true");
или$("input").prop('required',true);
напротив , вы можете атрибут / свойство . >> JQuery добавить обязательные для ввода полейremove
Для проблемы Select2 Jquery
Проблема в том, что проверка HTML5 не может сфокусировать скрытый недопустимый элемент. Я столкнулся с этой проблемой, когда имел дело с плагином jQuery Select2.
Решение Вы можете внедрить прослушиватель событий и «недопустимое» событие каждого элемента формы, чтобы вы могли манипулировать непосредственно перед событием проверки HTML5.
источник
Это сообщение покажет, если у вас есть такой код:
источник
Да ... Если скрытый элемент управления формы имеет обязательное поле, то он показывает эту ошибку. Одним из решений было бы отключить этот элемент управления формы . Это потому, что, как правило, если вы скрываете элемент управления формы, это потому, что вас не интересует его значение. Таким образом, эта пара значений имени элемента управления формы не будет отправлена при отправке формы.
источник
Вы можете попробовать
.removeAttribute("required")
те элементы, которые скрыты во время загрузки окна. так как вполне вероятно, что рассматриваемый элемент помечен как скрытый из-за JavaScript (формы с вкладками)например
Это должно сделать задачу.
Это сработало для меня ... ура
источник
Другая возможная причина, которая не покрывается всеми предыдущими ответами, когда у вас есть обычная форма с обязательными полями, и вы отправляете форму, а затем скрываете ее непосредственно после отправки (с использованием javascript), не оставляя времени для работы функции проверки.
Функциональность проверки будет пытаться сфокусироваться на требуемом поле и показать сообщение об ошибке, но поле уже скрыто, поэтому «Недопустимый элемент управления формы с именем = '' не может быть сфокусирован». появляется!
Редактировать:
Для обработки этого случая просто добавьте следующее условие в ваш обработчик отправки
Изменить: объяснение
Предполагая, что вы скрываете форму при отправке, этот код гарантирует, что форма / поля не будут скрыты, пока форма не станет действительной. Таким образом, если поле недопустимо, браузер может сосредоточиться на нем без проблем, так как это поле все еще отображается.
источник
Есть вещи, которые все еще меня удивляют ... У меня есть форма с динамическим поведением для двух разных сущностей. Одна сущность требует некоторых полей, а другая нет. Итак, мой JS-код, в зависимости от сущности, выполняет что-то вроде: $ ('# periodo'). RemoveAttr ('required'); $ ( "# Periodo-контейнер") скрыть ().
и когда пользователь выбирает другой объект: $ ("# periodo-container"). show (); $ ('# periodo'). prop ('required', true);
Но иногда при отправке формы возникает проблема: «Недопустимый элемент управления формы с именем = periodo '' не может быть сфокусирован (я использую одно и то же значение для идентификатора и имени).
Чтобы решить эту проблему, вы должны убедиться, что ввод, где вы устанавливаете или удаляете «требуемый», всегда виден.
Итак, что я сделал, это:
Это решило мою проблему ... невероятно.
источник
В моем случае..
ng-show
использовался.ng-if
был поставлен на место и исправил мою ошибку.источник
Для углового использования:
нг-требуется = «логическое»
Это будет применять html5 «обязательный» атрибут, только если значение истинно.
источник
Я пришел сюда, чтобы ответить, что сам вызвал эту проблему, не закрывая
</form>
тег и имел несколько форм на одной странице. Первая форма будет расширена, чтобы включить поиск подтверждения на входных данных из других источников. Поскольку эти формы скрыты, они вызвали ошибку.так, например:
Триггеры
источник
Есть много способов исправить это, как
<form action="...." class="payment-details" method="post" novalidate>
Команда Use может удалить обязательный атрибут из обязательных полей, что также неверно, так как оно снова удалит проверку формы.
Вместо этого:
<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text" required="required">
<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text">
Использование может отключить обязательные поля, когда вы не собираетесь отправлять форму, вместо того, чтобы делать какие-либо другие опции. Это рекомендуемое решение на мой взгляд.
подобно:
<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text" disabled="disabled">
или отключите его через код javascript / jquery в зависимости от вашего сценария.
источник
Я нашел ту же проблему при использовании Angular JS. Это было вызвано использованием требуемого вместе с ng-hide . Когда я нажал кнопку отправки, когда этот элемент был скрыт, произошла ошибка . Недопустимый элемент управления формы с именем = '' не может быть сфокусирован.наконец-то!
Например, использование ng-hide вместе с required:
Я решил это, заменив необходимый вместо этого ng-pattern.
Пример решения:
источник
Для других пользователей AngularJS 1.x эта ошибка возникла из-за того, что я скрывал отображение элемента формы вместо его полного удаления из DOM, когда мне не нужно было завершать элемент управления.
Я исправил это, используя
ng-if
вместоng-show
/ng-hide
на div, содержащий элемент управления формы, требующий проверки.Надеюсь, что это поможет вам коллегам по крайним случаям.
источник
Позвольте мне изложить мой случай, так как он отличался от всех вышеупомянутых решений. У меня был тег HTML, который не был закрыт правильно. элемент не был
required
, но он был встроен вhidden
divпроблема в моем случае заключалась в том
type="datetime-local"
, что, по какой-то причине, проверялось при отправке формы.я изменил это
в это
источник
Я хотел ответить здесь, потому что ни один из этих ответов, или любой другой результат Google не решил проблему для меня.
Для меня это не имело никакого отношения к наборам полей или скрытым вводам.
Я обнаружил, что если бы я использовал
max="5"
(например), это произвело бы эту ошибку. Если бы я использовалmaxlength="5"
... без ошибок.Я смог воспроизвести ошибку и очистить ошибку несколько раз.
Я до сих пор не знаю, почему использование этого кода приводит к ошибке, поскольку она утверждает, что она должна быть действительной, даже без «мин», как я полагаю.
источник
min='-9999999999.99' max='9999999999.99'
.В качестве альтернативы другой и надежный ответ заключается в использовании HTML5-атрибута Placeholder, тогда не будет необходимости использовать какие-либо проверки js.
Chrome не сможет найти пустые, скрытые и необходимые элементы для фокусировки. Простое решение
Надеюсь, это поможет. Я полностью разобрался с этим решением.
источник
Я пришел сюда с той же проблемой. Для меня (вставка скрытых элементов по мере необходимости - т.е. образование в приложении для работы) были необходимые флаги.
Я понял, что валидатор стрелял по введенному быстрее, чем документ был готов, поэтому он пожаловался.
Мой оригинальный тег ng-required использовал тег видимости (vm.flags.hasHighSchool).
Я решил, создав специальный флаг для установки обязательного ng-required = "vm.flags.highSchoolRequired == true"
Я добавил 10 мс обратного вызова при установке этого флага, и проблема была решена.
Html:
источник
Убедитесь, что все элементы управления в вашей форме с обязательным атрибутом также имеют атрибут name
источник
Эта ошибка произошла со мной, потому что я отправлял форму с обязательными полями, которые не были заполнены.
Ошибка возникла из-за того, что браузер пытался сфокусироваться на обязательных полях, чтобы предупредить пользователя о том, что поля обязательны для заполнения, но эти обязательные поля были скрыты на экране без div, поэтому браузер не мог сосредоточиться на них. Я отправлял из видимой вкладки, а обязательные поля были в скрытой вкладке, следовательно, ошибка.
Чтобы исправить, убедитесь, что вы контролируете обязательные поля заполнены.
источник
Это потому, что в форме есть скрытый ввод с обязательным атрибутом.
В моем случае у меня было поле выбора, и оно скрыто токенайзером jquery с использованием встроенного стиля. Если я не выбираю токен, браузер выдает вышеуказанную ошибку при отправке формы.
Итак, я исправил это, используя следующую технику CSS:
источник
Я получил ту же ошибку при клонировании HTML-элемента для использования в форме.
(У меня есть частично полная форма, в которую вставлен шаблон, а затем шаблон изменен)
Ошибка ссылалась на исходное поле, а не на клонированную версию.
Я не смог найти никаких методов, которые заставляли бы форму переоценивать себя (в надежде, что это избавит от любых ссылок на старые поля, которые сейчас не существуют) перед запуском проверки.
Чтобы обойти эту проблему, я удалил обязательный атрибут из исходного элемента и динамически добавил его в клонированное поле, прежде чем вводить его в форму. Форма теперь корректно проверяет клонированные и измененные поля.
источник