相对较新的 HTML 表单控件包括“type=range”和“type=color”控件。该规范规定,当提交包含此类控件的表单时,始终会为这些控件提交一个值。它们永远不会是空的。
这与 type=text 控件和其他类似控件不同,它们的值确实可以是空字符串。
范围和颜色控件似乎不可能用于反映数据库中可为空列的状态。
有什么解决办法吗?
编辑:行为由此处的链接指定:HTML5 规范
对于范围,您可以将范围的值设置为超出范围的数字(当然,如果您希望用户不要弄乱它):
var range = document.getElementById('rangeInput');
//let's say your range is 0-10
rangeInput.style.display = 'none';
range.min = -1;
range.value = -1;
//-1 would be your "null" value
//now, if you wanted the user to be able to edit the null range...
range.style.display = '';
range.addEventListener('change',function(){
if(this.value < 0) this.value = 0;
//this should keep people from setting it to "null"
});
我仍然不确定如何对颜色输入执行此操作,因为它没有“越界”。
从实践和语义上来说,
NULL
通常意味着“尚未设置任何值,因此使用默认值”。由于存在值(即使不在相关记录中),因此可以将该值赋予输入的初始状态。
未更改的范围或颜色输入可以使用自定义样式来反映其未设置状态(例如降低不透明度)。要重置范围,默认范围位置 0%、100% 或 50% 可能可以直观地解决大多数情况(无需添加重置按钮)。对于颜色输入,任何具有 0% Alpha 的颜色(例如,
transparent
或 #00000000
或 hsla(20,50%,80%,0%)
)都可以重置(无需添加重置按钮)。
与用于“关闭”某些内容的复选框一样,后端验证执行最后一步,将默认值转换为
SET input_field=NULL
。