我的UI页面上有四个TextField。我从所有input
获取用户的textfields
值,例如值Textfield1.getvalue(),Textfield2.getvalue(),Textfield3.getvalue(),Textfield4.getvalue()
。
现在点击一下按钮,我需要检查用户实际填充了哪些文本字段,并附上我需要向服务器发送http请求以在数据库上查询的值。这些值用于过滤表中的值。基本上这些值是"TABLE COLUMN"
值。为此,我想到使用旧学校组合,如:
if (Textfield1.getvalue()=="" && Textfield2.getvalue()!=""){
//do something
}
else if (Textfield2.getvalue()=="" && Textfield3.getvalue()!=""){
//do something
}
else if (Textfield3.getvalue()=="" && Textfield4getvalue()!=""){
//do something
}
......
and so on.
这个,我个人觉得效率不高而且不是一个好的编程方式。我很确定可能还有其他方法可以做到这一点,我不知道,也找不到谷歌搜索它。任何人都可以分享一些想法以获得更好的解决方案。
提前致谢。
答案 0 :(得分:2)
如果您想根据具有值的第一个字段执行某些操作,至少从您的示例中看起来是这样的,您可以执行以下操作:
var do_something = {
0 : function(val) { console.log("Doing x width " + val)},
1 : function(val) { console.log("Doing y width " + val)},
2 : function(val) { console.log("Doing z width " + val)},
3 : function(val) { console.log("Doing w width " + val)},
}
$("#post").on("click", function() {
var val;
$(".test").each(function(i) {
val = $(this).val();
if (val) {
do_something[i](val);
return false; // Break
// (Or omit the break if you want to "do_something" with all fields
// having a value.)
}
});
});
或者,根据不同的不同,更好的解决方案可能是:
var do_something2 = {
act1 : function(k, val) { console.log("Doing x width " + val + " k=" + k) },
act2 : function(k, val) { console.log("Doing y width " + val + " k=" + k) },
act3 : function(k, val) { console.log("Doing z width " + val + " k=" + k) }
};
$("#post2").on("click", function() {
var val;
$(".test").each(function(i) {
val = $(this).val();
if (val) {
do_something2[$(this).data("act")](i, val);
return false; // Break
}
});
});
你有这样的输入字段(动态或以其他方式创建):
<input type="text" data-act="act1" class="test" value="one" />
<input type="text" data-act="act2" class="test" value="two" />
通过这种方式,您只需将data-act
值设置为所需功能,即可轻松更改每个字段的操作。
答案 1 :(得分:1)
一个想法 - 检查单个字段一次并合并为一个唯一值:
var c=0;
if (condition1) c+=1;
if (condition2) c+=2;
if (condition3) c+=4;
等。现在,每种条件组合都有一个与之关联的唯一值,您可以使用switch
语句来实现更清洁的流程。
答案 2 :(得分:1)
考虑数据而不是控制流。我建议用这种方式思考问题:
数据 - &gt;验证 - &gt;副作用
所有这些步骤必须解耦。在这个例子中,您可能需要重新考虑您的数据以适应您的代码:
// Data
var fields = [Textfield1, Textfield2, Textfield3, Textfield4];
// Validation
var valid = fields.filter(function(x) {
return x.getvalue();
});
// Side effects
valid.forEach(function(field) {
var value = field.getvalue();
// do something
});