3
回答
用try catch 做表单验证是否可取

最近做一个注册的表单验证,前端必须给提示,所有合法后才发送ajax请求。
我的代码是:
verifyForm:function(){

try{
    result1 = 表单元素1验证
    result2 = 表单元素2验证
    。。。 return {result1,result2}
}catch (e){ new Error(e.message) return false }

}
表单元素1验证:function(){

if 不满足条件1 throw errMessage

}

我的问题是:是否有人这样玩过,这样写有什么问题?

<无标签>
举报
Crazydonkey
发帖于2年前 3回/240阅
共有3个答案 最后回答: 2年前

try catch是用来抛出程序异常的。像表单值输入不合法属于业务逻辑方面的规定,最好别这么写。看你的需求无非就是在点击提交按钮时逐一对表单域进行验证,写几个if足以

--- 共有 1 条评论 ---
Crazydonkey这段代码的意义不止是想获得提示,而且想让他能返回验证结果,如果验证结果正确还希望能获得对应的表达数据,如果验证错误,还希望代码能提前结束 2年前 回复

(1)用try catch 做表单验证,貌似很奇葩啊,我没听说有这样去做的。

(2)不过在W3S上的介绍中,发现一个例子,貌似比较契合你的想法:

<script>
function myFunction()
{
try
  {
  var x=document.getElementById("demo").value;
  if(x=="")    throw "empty";
  if(isNaN(x)) throw "not a number";
  if(x>10)     throw "too high";
  if(x<5)      throw "too low";
  }
catch(err)
  {
  var y=document.getElementById("mess");
  y.innerHTML="Error: " + err + ".";
  }
}
</script>

<h1>My First JavaScript</h1>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="mess"></p>




--- 共有 6 条评论 ---
春眠不觉晓回复 @Crazydonkey : 你有写出demo吗,做完给我看看! 2年前 回复
Crazydonkey回复 @春眠不觉晓 : 是的,但是try中也要能返回正确是数值。并且里面的表单元素验证,都可以下放到元素本省,并有统一的catch 抛出各自的错误。这样可以少些一大堆 if else ,并且几乎0耦合。 2年前 回复
春眠不觉晓回复 @Crazydonkey : 就这个例子而言,你在`catch`块中 return err ,就可以了吧! 2年前 回复
Crazydonkey回复 @webcitizen : 可是用try catch可以大幅度降低代码复杂度。而且结构更加精巧 2年前 回复
liyu365回复 @Crazydonkey : 函数提前结束执行最好还是用return。你可以在函数的if语句中return false,如果函数执行到了末尾返回true。 2年前 回复
顶部