Подтвердить что ты не робот

Обход HTML "обязательный" атрибут при отправке

Я использую required для первой проверки перед отправкой формы.

<form action="myform.php">
  Foo: <input type="text" name="someField" required="required">
  <input type="submit" value="submit">
  <input type="submit" value="ignore">
</form>

Проблема в том, что у меня есть кнопка "игнорировать", которая также отправляет форму, и логика бэкэнд затем устанавливает правильное состояние в БД. В этом случае (игнорировать) проверка не нужна (потому что нет необходимости заполнять поле "Foo" ).

Какой лучший способ справиться с двумя сценариями?

  • Я знаю, что я мог отказаться от "необходимости" и выполнить проверку в другом месте (backend/JavaScript). Я ищу способ сохранить "необходимый".
  • Я могу использовать Js onclick для сценария кнопки игнорирования и удалить атрибут перед отправкой формы (qaru.site/info/127368/...).

Но на самом деле я ищу что-то умнее....

--- Редактировать ---

Да, дубликат Обязательный атрибут HTML5

4b9b3361

Ответ 1

Нет JavaScript, не требуется вторая форма, и проверка может оставаться:

Для именно этого варианта использования спецификация HTML5 спроектировала атрибут formnovalidate для отправки элементов (например, <input type=submit>), как один из атрибутов для отправки формы:

Атрибут formnovalidate может использоваться для создания кнопок отправки, которые не запускают проверку ограничений.

Так просто положите

<form action="myform.php">
  Foo: <input type="text" name="someField" required>
  <input type="submit" value="submit">
  <input type="submit" value="ignore" formnovalidate>
</form>

Ответ 2

Ваш №2 - общий подход. Что-то вроде:

$('input[value="ignore"]').click(function() {
    $(this).siblings('input[type="text"]').removeAttr('required');
});

Возможно, нужно использовать mousedown для извлечения submit.

Ответ 3

Если вы не хотите использовать Javascript, вы можете сделать их отдельными формами и иметь все входы, спрятанные для формы ignore.

Не лучший вариант, но это альтернатива.

Ответ 4

Вы должны использовать подход № 1 на следующих основаниях. Основными причинами использования required вместо проверки JavaScript является то, что он проще и работает, даже когда JavaScript отключен. Здесь простота не применяется, поскольку использование required усложняет задачу. И последняя причина не применяется: с отключенным JavaScript и браузером, поддерживающим required, кнопка "игнорировать" не работает, если в текстовое поле не введены некоторые данные.

Другой вариант - это тот, который указан в ответе @MattKeneficks. Это может привести даже к более простой структуре и логике. Если форма действительно такая же простая, как в примере, ее легко разбить на две формы:

<form action="myform.php">
  Foo: <input type="text" name="someField" required="required">
  <input type="submit" value="submit">
</form>
<form action="myform.php">
  <input type="submit" value="ignore">
</form>