代码:每次只显示一条错误消息。
function isValidFields() {
if (!$("#x").val()) {
utilsService.setErrorClass('x');
$scope.validationMessage.xErrorMessage = true;
} else if (!$("#a").val()) {
utilsService.setErrorClass('a');
$scope.validationMessage.yErrorMessage = true;
} else if (!$("#b").val()) {
utilsService.setErrorClass('b');
$scope.validationMessage.zgErrorMessage = true;
} else if (!$("#c").val()) {
utilsService.setErrorClass('c');
$scope.validationMessage.cgErrorMessage = true;
} else if (!$("#d").val()) {
utilsService.setErrorClass('d');
$scope.validationMessage.dgErrorMessage = true;
} else if (!$("#e").val()) {
utilsService.setErrorClass('e');
$scope.validationMessage.egErrorMessage = true;
} else if (!$("#f").val()) {
utilsService.setErrorClass('f');
$scope.validationMessage.fgErrorMessage = true;
} else {
$scope.validationMessage = {};
return true;
}
}
使上述代码更具可读性的最佳方法是什么,避免使用if else语句并避免代码重复。
答案 0 :(得分:1)
你可以选择这样的东西......
//mock scope
let $scope = {
validationMessage: {
xErrorMessage: null
}
};
//mock utilServer
let utilsService = {
setErrorClass: (id) => console.log(id)
}
function isValidFields() {
let ids = ['x', 'a', 'b', 'c', 'd', 'e', 'f'];
// find the id of the first element with an empty value
let first = ids.reduce((last, curr) => {
return last || ((!$("#" + curr).val()) ? curr : null)
}, null);
// all elements had values
if (!first) {
$scope.validationMessage = {};
return true;
}
utilsService.setErrorClass(first);
$scope.validationMessage.xErrorMessage = true;
}
input, button {
display: block;
margin: 10px;
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onClick="isValidFields()">try it</button>
<input typ="text" id="x">
<input typ="text" id="a">
<input typ="text" id="b">
<input typ="text" id="c">
<input typ="text" id="d">
<input typ="text" id="e">
<input typ="text" id="f">
请注意,这应该等同于原始代码,但根据值val()
返回值的类型,它会很脆弱。
答案 1 :(得分:1)
您可以通过以下方式执行此操作:
function isValidFields() {
var fields = ['x','a','b','c','d','e','f'];
$scope.validationMessage = {};
for(var i=0;i<fields.length;i++){
if(!$("#"+fields[i]).val()) {
utilsService.setErrorClass(fields[i]);
$scope.validationMessage[fields[i]+'ErrorMessage'] = true;
return true;
}
}
}