[英]What does the fieldset validity mean?
Here's the documentation: HTMLFieldSetElement - Web APIs | 这是文档: HTMLFieldSetElement - Web API | MDN .
MDN 。
I wonder what the fieldset
validity mean. 我想知道
fieldset
有效性是什么意思。 Does it mean the validity of all the inputs
, for example, inside the fieldset
? 这是否意味着所有
inputs
的有效性,例如,在fieldset
? Then why doesn't the following work if you enter out-of-range values: 如果输入超出范围的值,为什么以下工作不起作用:
var form = document.querySelector('form'); form.querySelector('button').addEventListener('click', function() { var fieldsets = form.querySelectorAll('fieldset'); for (var fieldset of fieldsets) { var output = fieldset.querySelector('output'); if (fieldset.validity.valid) { output.value = 'Valid!'; } else { output.value = 'Invalid!'; } } });
input { width: 4em; } input:invalid { outline: 1px solid red; }
<form> <fieldset> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <output></output> </fieldset> <fieldset> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <output></output> </fieldset> <button type="button">Validate</button> </form>
https://dev.w3.org/html5/pf-summary/forms.html#the-fieldset-element https://dev.w3.org/html5/pf-summary/forms.html#the-fieldset-element
Constraint validation: fieldset elements are always barred from constraint validation.
约束验证:始终禁止字段集元素进行约束验证。
https://dev.w3.org/html5/pf-summary/forms.html#barred-from-constraint-validation https://dev.w3.org/html5/pf-summary/forms.html#barred-from-constraint-validation
A listed form-associated element is a candidate for constraint validation unless a condition has barred the element from constraint validation.
列出的与表单相关的元素是约束验证的候选元素,除非条件禁止元素进行约束验证。 (For example, an element is barred from constraint validation if it is an output or fieldset element.)
(例如,如果元素是输出或字段集元素,则禁止其进行约束验证。)
https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement#Methods https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement#Methods
HTMLFieldSetElement.reportValidity() Always returns true because objects are never candidates for constraint validation.
HTMLFieldSetElement.reportValidity()始终返回true,因为对象永远不是约束验证的候选对象。
You can do this: 你可以这样做:
var form = document.querySelector('form'); form.querySelector('button').addEventListener('click', function() { var fieldsets = form.querySelectorAll('fieldset'); for (var fieldset of fieldsets) { var output = fieldset.querySelector('output'); output.value = fieldset.querySelectorAll("input:invalid").length===0 ? 'Valid!' : 'Invalid!'; } });
input { width: 4em; } input:invalid { outline: 1px solid red; }
<form> <fieldset> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <output></output> </fieldset> <fieldset> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <output></output> </fieldset> <button type="button">Validate</button> </form>
Or loop: 或循环:
var errors = { "valueMissing": "Missing", "typeMismatch": "Wrong type", "patternMismatch": "Wrong pattern", "tooLong": "Too long", "tooShort": "Too short", "rangeUnderflow": "< @", "rangeOverflow": "> @", "stepMismatch": "Step error", "badInput": "Not a number", "customError": "" } function getError(inp) { for (var val in inp.validity) { if (inp.validity[val]) { var error = errors[val]; if (val === "rangeUnderflow") error = error.replace("@",inp.min) if (val === "rangeOverflow") error = error.replace("@",inp.max) return error; } } } var form = document.querySelector('form'); form.querySelector('button').addEventListener('click', function() { var fieldsets = form.querySelectorAll('fieldset'); for (var fieldset of fieldsets) { var output = fieldset.querySelector('output'); output.value = 'Valid!'; var inputs = fieldset.querySelectorAll("input"); var errors = [] for (var inp of inputs) { if (!inp.validity.valid) { errors.push(getError(inp)); } } if (errors.length) output.value=errors.join(" and ") } });
input { width: 4em; } input:invalid { outline: 1px solid red; }
<form> <fieldset> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <output></output> </fieldset> <fieldset> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <input type="number" step="any" min="0" max="100"> <output></output> </fieldset> <button type="button">Validate</button> </form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.