我意识到你永远不应该禁用一个元素并且也需要它,因为如果它被禁用,用户怎么能使它有效?
但是,我有<select>
个产品,我希望我的用户可以选择。当他们选择其中一个产品时,只有当产品具有一个或多个模型时,才会填充,启用和其他<select>
产品。否则,模型选择被禁用并清空。
虽然我认为我的代码是完美的,但我可以做到这样,模型下拉列表永远不会被禁用并且同时需要,我并不完美。那么,是否可以使用已禁用且必需的<select>
提交表单?
取自w3.org:
约束验证:如果元素是必需的,并且其值IDL属性适用并且处于模式值且元素是可变的,则元素的值为空字符串,然后该元素正在丢失。
详细了解“可变”意味着什么。
表单控件可以指定为可变。
注意:这决定了(通过本规范中的定义和要求依赖于是否指定了一个元素)用户是否可以修改表单控件的值或检查,或者控件是否可以自动预填充。
选择没有值,因此由它的选项决定。
select元素没有值;其选项元素的选择性是用来代替的。
所以,我认为这意味着如果<select>
元素被禁用并且需要,那么表单可能被视为有效吗?
答案 0 :(得分:7)
http://www.w3.org/TR/html5/forms.html#enabling-and-disabling-form-controls:-the-disabled-attribute:
约束验证:如果某个元素被禁用,则会禁止它进行约束验证。
http://www.w3.org/TR/html5/forms.html#barred-from-constraint-validation:
提交表元素是约束验证的候选对象,除非条件禁止约束验证中的元素。
最后,从约束验证步骤列表http://www.w3.org/TR/html5/forms.html#constraint-validation:
3.1:如果字段不是约束验证的候选者,则转到下一个元素。
这意味着,当检查表单有效性时,禁用的元素将被“传递”。
它不会触发任何错误,并且对其所属表单的验证状态没有任何影响。