Обход 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
Ответы
Ответ 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>