У меня есть форма для отправки нескольких полей.Два из них предназначены для изменения пароля.
Эти поля пароля не обязательны для заполнения перед отправкой.Однако, если одно из них не пустое, я добавляю обязательный атрибут в оба поля, когда он изменяется через jQuery.Я удаляю атрибуты, когда очищаю одно, а другое уже пусто.
То, что кажется, работает в большинстве случаев за исключением:
- Я заполняю пароль
- пароль2 пусто
- Я отправляю форму
В этом случае проверка для пароль2 появляется, но если я хочу удалить все и отправить, я не могу:
Я удаляю
пароль Я снова отправляю форму Подтверждение
password2 снова появляется.Даже если атрибут «required» удален в исходном коде HTML
Это HTML-код:
<form id="edicionPerfilForm" action="actor/edit.do" method="post">
<div class="row">
<div class="form-group col-md-4">
<div>
<label for="password">Password</label>
<input id="password" name="password" class="form-control" type="password" value="" oninvalid="this.setCustomValidity('Fill out this field')" oninput="this.setCustomValidity('')">
<br>
</div>
</div>
<div class="form-group col-md-4">
<div>
<label for="password2">Repeat password</label>
<input id="password2" name="password2" class="form-control" type="password" value="" oninvalid="this.setCustomValidity('Fill out this field')" oninput="this.setCustomValidity('')">
</div>
</div>
</div>
<button name="save" type="submit" class="btn btn-dark">Send</button>
</form>
И код jQuery:
$('#password').change(function() {
if($(this).val() != ''){
$(this).attr('required', true);
$( '#password2' ).attr('required', true);
}else{
if($('#password2').val() == ''){
$(this).removeAttr('required');
$( '#password2' ).removeAttr('required');
}
}
});
$('#password2').change(function() {
if($(this).val() != ''){
$(this).attr('required', true);
$('#password').attr('required', true);
}else{
if($('#password').val() == ''){
$(this).removeAttr('required');
$('#password').removeAttr('required');
}
}
});
И это пример в JSFiddle:
https://jsfiddle.net/jke3pgh0/