Bootstrap 4 clear/reset 成功提交后验证
Bootstrap 4 clear/reset validation after successful submit
我使用 Bootstrap 4 来验证 'Contact Me' 表单。
成功提交表单后,我用 $('#contactForm').trigger("reset");
重置了它,这确实清除了输入字段,但是 这些仍然是标记为已验证(验证图标和绿色边框仍然存在)。
这会导致问题,因为我仅在验证所有输入后才启用“提交”按钮,并在提交后禁用它。但是由于输入仍然标记为 'Valid',任何字段中的任何有效条目都将启用该按钮,即使其他字段为空(所有字段都是“required” ).
请告知如何在提交表单后清除验证。谢谢!
重要提示:
我使用 Bootstrap 4。不是 3。我提到它是因为我在 SO 和其他地方浏览了数十个条目,大多数答案都参考 bootstrap.validator
, 不是 我的情况!
再次感谢。
我的html:
<div class="container"><br>
<div class="row">
<div class="col-lg-8 mx-auto">
<form id="contactForm" class="needs-validation" novalidate="novalidate">
<div class="control-group">
<div class="form-group">
Name<input type="text" id="name" class="form-control" pattern="^[a-zA-Z{1}[a-zA-Z-9 '\-]{1,29}$" required="required">
<div class="invalid-feedback"><a>Error...</a></div>
</div>
<div class="form-group">
Mail<input type="email" id="email" class="form-control" pattern="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}" required="required">
<div class="invalid-feedback"><a>Error...</a></div>
</div>
<div class="form-group">
Phone<input type="tel" id="phone" class="form-control" pattern="^[0-9\+]{1}[0-9\-]{9,17}$" required="required">
<div class="invalid-feedback"><a>Error...</a></div>
</div>
<div class="form-group">
Message<textarea type="text" id="message" class="form-control" rows="5" required="required"></textarea>
<div class="invalid-feedback"><a>Error...</a></div>
</div><br>
<div id="phpMailerResult"></div>
<div class="form-group text-center">
<button id="sendMessageButton" type="submit" class="btn btn-success btn-xl text-dark font-weight-bold">Send</button>
</div>
</div>
</form>
</div>
</div>
</div>
我的脚本:
$(document).ready(function() {
// ------------------------ Actions on SUBMIT --------------------
$('#sendMessageButton').click(function(e) {
e.preventDefault();
var name = $("input#name").val();
var email = $("input#email").val();
var phone = $("input#phone").val();
var message = $("textarea#message").val();
$.ajax({
url: "mail/contact_me.php",
method: 'post',
data: {
name: name,
phone: phone,
email: email,
message: message
},
cache: false,
success:function() {
$('#sendMessageButton').attr('disabled', true);
var jsSuccess1 = "<div class='alert alert-success>";
var jsSuccess2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsSuccess3 = "</button>";
var jsSuccess4 = "<strong>Message sent successfully!</strong>";
var jsSuccess5 = "</div>";
$('#phpMailerResult').html(jsSuccess1);
$('#phpMailerResult > .alert-success').append(jsSuccess2, jsSuccess3, jsSuccess4, jsSuccess5);
$('#contactForm').trigger("reset");
},
error:function() {
$('#sendMessageButton').attr('disabled', true);
var jsFail1 = "<div class='alert alert-danger>";
var jsFail2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsFail3 = "</button>";
var jsFail4 = "<strong>Something went wrong...!</strong>";
var jsFail5 = "</div>";
$('#phpMailerResult').html(jsFail1);
$('#phpMailerResult > .alert-danger').append(jsFail2, jsFail3, jsFail4, jsFail5);
},
});
return true;
});
// ----------------- Validate CONTACT form on input -----------------
let jsContactForm = document.getElementById('contactForm');
jsContactForm.querySelectorAll('.form-control').forEach(jsContactInput => {
jsContactInput.addEventListener(('input'), () => {
if (jsContactInput.checkValidity()) {
jsContactInput.classList.add('is-valid');
jsContactInput.classList.remove('is-invalid');
} else {
jsContactInput.classList.add('is-invalid');
jsContactInput.classList.remove('is-valid');
}
let jsIsValid = $(jsContactForm.querySelectorAll('.form-control')).length === $(jsContactForm.querySelectorAll('.form-control.is-valid')).length;
if (jsIsValid) {
$('#sendMessageButton').attr('disabled', false);
} else {
$('#sendMessageButton').attr('disabled', true);
}
});
});
});
我很高兴(也很自豪)自己解决了这个问题!
在脚本的 'Actions on SUBMIT' 部分中,我添加了一些行(我在以下代码片段中用 <=== 标记,以便更容易看到) .
现在提交成功后,输入字段会被清除,既不会标记为有效也不会标记为无效,因此发送联系我表格的新周期可以重新开始。
这是修改后的部分代码(其余代码未更改):
// ------------------------ Actions on SUBMIT --------------------
$('#sendMessageButton').click(function(e) {
e.preventDefault();
$('#phpMailerResult').show(); // <===
var name = $("input#name").val();
var email = $("input#email").val();
var phone = $("input#phone").val();
var message = $("textarea#message").val();
$.ajax({
url: "mail/contact_me.php",
method: 'post',
data: {
name: name,
phone: phone,
email: email,
message: message
},
cache: false,
success:function() {
$('#sendMessageButton').attr('disabled', true);
var jsSuccess1 = "<div class='alert alert-success myHeight22'>";
var jsSuccess2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsSuccess3 = "</button>";
var jsSuccess4 = "<strong>Message sent successfully!</strong>";
var jsSuccess5 = "</div>";
$('#phpMailerResult').html(jsSuccess1);
$('#phpMailerResult > .alert-success').append(jsSuccess2, jsSuccess3, jsSuccess4, jsSuccess5);
$('#contactForm').trigger("reset");
let jsContactForm = document.getElementById('contactForm'); // <===
jsContactForm.querySelectorAll('.form-control').forEach(jsContactInput => { // <===
jsContactInput.classList.remove('is-valid'); // <===
jsContactInput.classList.remove('is-invalid'); // <===
jsContactInput.addEventListener(('keyup'), () => { // <===
$('#phpMailerResult').hide(); // <===
}); // <===
}); // <===
},
error:function() {
$('#sendMessageButton').attr('disabled', true);
var jsFail1 = "<div class='alert alert-danger myHeight22'>";
var jsFail2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsFail3 = "</button>";
var jsFail4 = "<strong>Something went wrong...!</strong>";
var jsFail5 = "</div>";
$('#phpMailerResult').html(jsFail1);
$('#phpMailerResult > .alert-danger').append(jsFail2, jsFail3, jsFail4, jsFail5);
},
});
return true;
});
我使用 Bootstrap 4 来验证 'Contact Me' 表单。
成功提交表单后,我用 $('#contactForm').trigger("reset");
重置了它,这确实清除了输入字段,但是 这些仍然是标记为已验证(验证图标和绿色边框仍然存在)。
这会导致问题,因为我仅在验证所有输入后才启用“提交”按钮,并在提交后禁用它。但是由于输入仍然标记为 'Valid',任何字段中的任何有效条目都将启用该按钮,即使其他字段为空(所有字段都是“required” ).
请告知如何在提交表单后清除验证。谢谢!
重要提示:
我使用 Bootstrap 4。不是 3。我提到它是因为我在 SO 和其他地方浏览了数十个条目,大多数答案都参考 bootstrap.validator
, 不是 我的情况!
再次感谢。
我的html:
<div class="container"><br>
<div class="row">
<div class="col-lg-8 mx-auto">
<form id="contactForm" class="needs-validation" novalidate="novalidate">
<div class="control-group">
<div class="form-group">
Name<input type="text" id="name" class="form-control" pattern="^[a-zA-Z{1}[a-zA-Z-9 '\-]{1,29}$" required="required">
<div class="invalid-feedback"><a>Error...</a></div>
</div>
<div class="form-group">
Mail<input type="email" id="email" class="form-control" pattern="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}" required="required">
<div class="invalid-feedback"><a>Error...</a></div>
</div>
<div class="form-group">
Phone<input type="tel" id="phone" class="form-control" pattern="^[0-9\+]{1}[0-9\-]{9,17}$" required="required">
<div class="invalid-feedback"><a>Error...</a></div>
</div>
<div class="form-group">
Message<textarea type="text" id="message" class="form-control" rows="5" required="required"></textarea>
<div class="invalid-feedback"><a>Error...</a></div>
</div><br>
<div id="phpMailerResult"></div>
<div class="form-group text-center">
<button id="sendMessageButton" type="submit" class="btn btn-success btn-xl text-dark font-weight-bold">Send</button>
</div>
</div>
</form>
</div>
</div>
</div>
我的脚本:
$(document).ready(function() {
// ------------------------ Actions on SUBMIT --------------------
$('#sendMessageButton').click(function(e) {
e.preventDefault();
var name = $("input#name").val();
var email = $("input#email").val();
var phone = $("input#phone").val();
var message = $("textarea#message").val();
$.ajax({
url: "mail/contact_me.php",
method: 'post',
data: {
name: name,
phone: phone,
email: email,
message: message
},
cache: false,
success:function() {
$('#sendMessageButton').attr('disabled', true);
var jsSuccess1 = "<div class='alert alert-success>";
var jsSuccess2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsSuccess3 = "</button>";
var jsSuccess4 = "<strong>Message sent successfully!</strong>";
var jsSuccess5 = "</div>";
$('#phpMailerResult').html(jsSuccess1);
$('#phpMailerResult > .alert-success').append(jsSuccess2, jsSuccess3, jsSuccess4, jsSuccess5);
$('#contactForm').trigger("reset");
},
error:function() {
$('#sendMessageButton').attr('disabled', true);
var jsFail1 = "<div class='alert alert-danger>";
var jsFail2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsFail3 = "</button>";
var jsFail4 = "<strong>Something went wrong...!</strong>";
var jsFail5 = "</div>";
$('#phpMailerResult').html(jsFail1);
$('#phpMailerResult > .alert-danger').append(jsFail2, jsFail3, jsFail4, jsFail5);
},
});
return true;
});
// ----------------- Validate CONTACT form on input -----------------
let jsContactForm = document.getElementById('contactForm');
jsContactForm.querySelectorAll('.form-control').forEach(jsContactInput => {
jsContactInput.addEventListener(('input'), () => {
if (jsContactInput.checkValidity()) {
jsContactInput.classList.add('is-valid');
jsContactInput.classList.remove('is-invalid');
} else {
jsContactInput.classList.add('is-invalid');
jsContactInput.classList.remove('is-valid');
}
let jsIsValid = $(jsContactForm.querySelectorAll('.form-control')).length === $(jsContactForm.querySelectorAll('.form-control.is-valid')).length;
if (jsIsValid) {
$('#sendMessageButton').attr('disabled', false);
} else {
$('#sendMessageButton').attr('disabled', true);
}
});
});
});
我很高兴(也很自豪)自己解决了这个问题!
在脚本的 'Actions on SUBMIT' 部分中,我添加了一些行(我在以下代码片段中用 <=== 标记,以便更容易看到) .
现在提交成功后,输入字段会被清除,既不会标记为有效也不会标记为无效,因此发送联系我表格的新周期可以重新开始。
这是修改后的部分代码(其余代码未更改):
// ------------------------ Actions on SUBMIT --------------------
$('#sendMessageButton').click(function(e) {
e.preventDefault();
$('#phpMailerResult').show(); // <===
var name = $("input#name").val();
var email = $("input#email").val();
var phone = $("input#phone").val();
var message = $("textarea#message").val();
$.ajax({
url: "mail/contact_me.php",
method: 'post',
data: {
name: name,
phone: phone,
email: email,
message: message
},
cache: false,
success:function() {
$('#sendMessageButton').attr('disabled', true);
var jsSuccess1 = "<div class='alert alert-success myHeight22'>";
var jsSuccess2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsSuccess3 = "</button>";
var jsSuccess4 = "<strong>Message sent successfully!</strong>";
var jsSuccess5 = "</div>";
$('#phpMailerResult').html(jsSuccess1);
$('#phpMailerResult > .alert-success').append(jsSuccess2, jsSuccess3, jsSuccess4, jsSuccess5);
$('#contactForm').trigger("reset");
let jsContactForm = document.getElementById('contactForm'); // <===
jsContactForm.querySelectorAll('.form-control').forEach(jsContactInput => { // <===
jsContactInput.classList.remove('is-valid'); // <===
jsContactInput.classList.remove('is-invalid'); // <===
jsContactInput.addEventListener(('keyup'), () => { // <===
$('#phpMailerResult').hide(); // <===
}); // <===
}); // <===
},
error:function() {
$('#sendMessageButton').attr('disabled', true);
var jsFail1 = "<div class='alert alert-danger myHeight22'>";
var jsFail2 = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×";
var jsFail3 = "</button>";
var jsFail4 = "<strong>Something went wrong...!</strong>";
var jsFail5 = "</div>";
$('#phpMailerResult').html(jsFail1);
$('#phpMailerResult > .alert-danger').append(jsFail2, jsFail3, jsFail4, jsFail5);
},
});
return true;
});