简体   繁体   English

fieldset的有效性是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM