在默认表单重置后,似乎Internet Explorer未重置验证状态(.checkValidity()
和validity.valid
)。这在Chrome和Edge中可以正常运行。
有没有人对此问题有任何了解,以及如何解决这个问题 - 也许如何手动重置IE中的验证状态?
我没有看到任何引用此问题的文档 - caniuse声称在IE10和IE11中对HTML5验证的支持有限,但没有具体引用此属性。
请参阅以下示例 - 预期行为:
(function() {
$("form")
.on("submit", function(e) {
var v = formValidCheck();
if (!v) {
e.preventDefault();
}
radioValidCheck(false);
return false; // don't go anywhere
})
.on("reset", function(e) {
// Push onto event stack, so it refreshes after the form fields have been reset
setTimeout(function() {
$('input').change();
formValidCheck();
radioValidCheck(false);
}, 0);
});
$('input').on('invalid', function(e) {
e.preventDefault();
radioValidCheck(true);
});
$('input').on('change', function(e) {
formValidCheck();
radioValidCheck(false);
});
function formValidCheck() {
var v = $('form').get(0).checkValidity();
$("#test").text(v);
return v;
}
function radioValidCheck(clearFormValid) {
if (clearFormValid) {
$('#test').text('');
}
$("#testradio").text($("#radio1").get(0).validity.valid);
}
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Form is valid? <span id="test"></span></p>
<p>Radio is valid? <span id="testradio"></span></p>
<form>
<input type="radio" required id="radio1" name="testradios">
<label for="radio1">1</label>
<input type="radio" required id="radio2" name="testradios">
<label for="radio2">2</label>
<input type="radio" required id="radio3" name="testradios">
<label for="radio3">3</label>
<button type="submit">Submit</button>
<button type="reset">Reset</button>
</form>
我尝试了一些事情,例如触发对输入的更改,并将其推送到事件堆栈,以便在将更改应用到输入后访问它,如代码段中所示,但仍然没有运气。
我没有发现任何错误或在其他地方提及