如果其他条件Javascript

时间:2014-02-21 00:50:32

标签: javascript jquery if-statement

我的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.

这个,我个人觉得效率不高而且不是一个好的编程方式。我很确定可能还有其他方法可以做到这一点,我不知道,也找不到谷歌搜索它。任何人都可以分享一些想法以获得更好的解决方案。

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果您想根据具有值的第一个字段执行某些操作,至少从您的示例中看起来是这样的,您可以执行以下操作:

»Simple Fiddle.«

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
});