Удалить требуемое свойство из поля ввода в форме submit

Модель:

[Display(Name = "City"]
[Required]
[RegularExpression(@"^(?!\d$).*$"]
[StringLength(20,MinimumLength = 2]
public string City { get; set; }

форма:

@Html.LabelFor(x => x.City, new { @class = "control-label" })
@Html.TextBoxFor(x => x.City, new {id="city" })

Script:

<script>
  $(document).ready(function () {   
    $("#identificationForm").submit(function (e) {
      var required=document.getElementById("city").required;
      console.log(required);
      // e.preventDefault();
     });
  });
</script>

Я хочу удалить требуемое свойство, если какое-то условие выполнено. Это можно сделать так. Как я могу это достичь?

Ответ 1

JavaScript чувствителен к регистру.

Использование

document.getElementById("city").required = false;

Демонстрация

Будьте осторожны, чтобы ваш код не работал, когда вы пытаетесь получить доступ к элементу до его существования. Поместите свой script после элемента, если вы не выполняете код в событии:

<input type="text" id="city" required>
<script>
if(somecondition is true){
    document.getElementById("city").required = false;
}
</script>

Обратите внимание, что вы не можете изменить это в функции отправки и ожидать, что ваша форма будет отправлена, потому что слишком поздно: этот обработчик событий не будет вызываться, если обязательное поле не заполнено!

Ответ 2

Вы можете использовать:

document.getElementById("city").removeAttribute("required");

или с помощью jQuery

$('#city').removeAttr('required')

Ответ 3

Вы можете сделать это:

if(somecondition is true)
{
  var city = document.getElementById("city");
  city.removeAttribute('required');
}

Ответ 4

К моменту, когда функция On Submit должна удалить требуемый атрибут, форма уже прошла проверку. Сначала вам нужно отключить проверку, после чего вы сможете отправить форму с пустыми полями. Затем удалите необходимые атрибуты и, наконец, вручную вызовите проверку через $.validator.unubtrusive.parse(form), и теперь она будет проверять форму, вызывая другие типы проверки, такие как string length и formatting, все остальное, кроме обязательных атрибутов. Проверьте if form.valid() then submit() else ничего не делать.

Ответ 5

В php это очень просто, это не будет проверять вашу форму при отправке,

<input type="submit" onclick="return confirm('Are you sure?')" value="Abort Test" formnovalidate>

Ответ 6

Не уверен, что кто-то выяснил лучший способ сделать это пока, и это может быть не самый эффективный способ сделать это, но вы можете использовать PHP, чтобы это сделать. Если условие, которое вы хотите встретить, известно до загрузки страницы, вы можете получить следующее:

<input type="text" id="city" 

<?php
     if (condition_is_met) {
          echo ">";
     } else {
          echo "required>";
     }
?>

Ответ 7

Если вы поместите свои текстовые поля в форму, можно перезаписать обязательное поле специальным атрибутом novalidate. Это синтаксис: <form novalidate>.. </form>

Вот пример:

<form novalidate>
  Zip code: <input type="text" name="zipcode" pattern="[0-9]{5}" required><br/>

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

Атрибут novalidate Вот ссылка с двумя живыми демонстрациями, использующими атрибут novalidate.

Ответ 8

Или в момент отправки формы вы можете отключить ее, если она пуста:

if($("#City").val().trim().length == 0) $("#City").attr("disabled", true);