我有一些Javascript处理表单以通过Ajax将结果发送到服务器,我想从代码中重用来处理某些问题类型的常见组件。假设我有两个问题类型“强制选择”和“强制选择与其他”,两者都使用单选按钮强制用户选择一个选项,但在第二种类型中,标有“其他”的单选按钮将允许它们将自己的答案输入问题框。获取单选按钮值在两者之间是常见的,但获取“其他”值则不会。是否可以接受
switch(questionType) {
case 'Forced Choice':
case 'Forced Choice with Other':
//code to get radio button value
case 'Forced Choice with Other':
//if value was "other", get the value of the textbox
break;
default:
break;
}
或者更喜欢说
switch(questionType) {
case 'Forced Choice':
case 'Forced Choice with Other':
//code to get radio button value
if(val == 'other' && questionType == 'Forced Choice with Other')
//code to get "other" value
break;
default:
break;
}
编辑:我只是想补充一些说明,在我的实际代码中,问题类型的区别并不像是否允许“其他”一样简单。我想使用相同的代码来获取所有基于单选按钮的问题的价值,并且有几种类型。对于某些人来说,它就像获取值一样简单,但对于其他人,我的脚本必须检查如何在表单的JSON配置文件中配置脚本。我想使用第一个模式来避免一些if语句都有2-3个条件。
您认为哪种模式更可取?为什么(如果第一种模式甚至可以正常运行)?
答案 0 :(得分:2)
在Javascript中,与许多常见语言一样,切换案例会“掉到”下一个,除非使用break
语句明确断开。这意味着,你的第一个例子就是工作,在技术上,但它是可怕的做法,非常混乱,以阅读和维护的(还,我不会感到惊讶,如果重复标签弄得有些口译或代码分析器)的
最好只将常用功能提取到命名函数中。这将使您的代码最容易阅读和维护,并且重复将减少为两次调用相同的函数。