根据元素的颜色来验证表单是一个好习惯吗?
Is it a good practice to validate a form based on element's color?
我正在编写一个表单,在提交数据之前有一个验证脚本。
基本上在所有输入字段中,我有一个函数来测试输入的内容是否正确,由'onchange'事件触发。如果内容"无效",则该函数将该输入字段的背景设置为红色。
function looseColorQty(t)
{
var n = t.value;
if(isNaN(n) == true || n < 0){
t.style.backgroundColor="red";
} else {
t.style.backgroundColor="";
}
}
然后当用户点击"提交"按钮时,会有另一个脚本根据是否有任何输入字段为"红色"来检查此表单是否可以提交。
var canNotSubmit = 0;
function checkError(){
var fieldsToCheck = document.getElementsByTagName("input");
var fieldsQty = fieldsToCheck.length;
for(var i=0; i<fieldsQty; i++){
var checkTarget = fieldsToCheck[i].style.backgroundColor;
if( checkTarget == "red"){
document.getElementById("tips").className = "tipError";
document.getElementById("tips").innerHTML = "Please correct all RED fields before you submit.";
canNotSubmit = 1;
return;
}
}
}
它实际上是有效的,但我有一种奇怪的感觉,这种验证是基于颜色的。我想知道这样做有什么缺点吗?
我觉得这不是个好主意。
相反,如果你不使用HTML5字段验证,我会在字段上附加(或更改)属性;例如,而不是设置t.style.backgroundColor="red"
附加data-validation="invalid"
属性,然后使用你的CSS 样式它作为一个红色背景。
以语义(意思)为基础,而不是以外表为基础。
然后onsubmit处理程序可以检查任何data-validation="invalid"
字段并根据这些字段发出消息。
不要忘记总是在提交后在服务器上再次验证,因为您不能信任客户端验证—数据在通过客户端验证后总是可以被篡改的。
我会给元素添加一个额外的classname。比如value-is-invalid
。然后您可以检查元素classname是否包含这个类。您还可以将background-color: red;
移动到css文件中的这个类中。因此,您可以将样式从逻辑中分离出来,并在以后更容易地更改样式。
:
.value-is-invalid {
background-color: red;
}
正如Stephen p指出的那样,你不能依赖于客户端验证。始终在服务器端验证
相关文章:
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 这在JavaScript中是一个好的变量名吗
- 在条形图中呈现数据AngularJS,如何制作一个好的多条形图
- 依赖css的javascript的一个好例子是什么
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- 关于如何使用BusterJs资源配置选项的一个好例子
- 寻找一个好的答案字符串圆形物体
- 正在寻找一个好的在线JS obsfucator只用于缩小的目的
- 有没有一个好的框架或方法来重构JavaScript对象
- 对于用NodeJS编写的递归MongoDB归档程序来说,这是一个好的架构吗
- 我们有一个好的javascript调试器吗
- 检测按下了哪个键——这是一个好方法吗
- 有没有一个好的方法来缩短Javascript的承诺
- 从C#Windows Phone应用程序调用Javascript-这是一个好方法吗
- 在javascript中使用php代码是一个好习惯吗?
- 在AngularJS中使用自定义指令和$scope之间的紧密耦合是一个好习惯吗?
- 控制器继承在AngularJS中是一个好习惯吗?
- 如果angular视图直接访问服务,这是一个好习惯吗?
- 根据元素的颜色来验证表单是一个好习惯吗?
- 在React中调用this.props.children上的setState或其他方法是一个好习惯吗?