JavaScript中

时间:2017-08-31 05:23:37

标签: javascript for-loop if-statement switch-statement

我的表单上有5个复选框,每个复选框都有一个单独的条件来验证。用户可以选择任意数量的复选框。对于每个选中的复选框,我必须执行它的相应条件。 示例

如果是checkbox1,则条件1

如果是checkbox2,则条件为2

如果是checkbox3,则条件为3

如果checkbox1& checkbox2然后条件1&条件2

如果checkbox1& checkbox3然后条件1& condition3

如果checkbox2& checkbox3然后条件2& condition3

依旧...... 直到所有checbox的所有组合

我想避免使用多个if语句,任何人都可以在JavaScript中为我提供更好的逻辑。

TIA

3 个答案:

答案 0 :(得分:1)

单独处理每个条件

您可以从输出中看到您的“条件”与复选框状态结合

if (VertScrollBox1.ClientWidth = VertScrollBox1.Width) then
  VerticalScrollBarVisible := False;
  VerticalScrollBarWidth := 0;
else
begin
  VerticalScrollBarVisible := True;  
  VerticalScrollBarWidth := VertScrollBox1.StylesData['vscrollbar.width'].AsExtended;
end;

答案 1 :(得分:0)

您可以尝试将每个复选框的条件放入其自己的函数中,并通过复选框id将该函数存储为javascript对象中的键:



function run() {
  var checkboxes = document.querySelectorAll('input.condition:checked')

  var conditions = {
    'one': function(data) {
      return data.one;
    },
    'two': function(data) {
      return data.two;
    },
    'three': function(data) {
      return data.three;
    }
  };

  var someJson = {
    'one': true,
    'two': true,
    'three': false
  };

  if (!checkboxes.length) {
    console.log('Please select at least one checkbox');
    return;
  }

  for (var i = 0; i < checkboxes.length; i++) {
    var checkbox = checkboxes[i];
    var id = checkbox.id;
    var conditionFunc = conditions[id];
    if (typeof conditionFunc !== 'function' || !conditionFunc(someJson)) {
      console.log('Failed on condition for checkbox: ' + id);
      return;
    }
  }
  console.log('Completed all conditions successfully!');
}
&#13;
<input type="checkbox" class="condition" id="one">One</input><br>
<input type="checkbox" class="condition" id="two">Two</input><br>
<input type="checkbox" class="condition" id="three">Three</input><br>
<button onclick="run()">Run</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这就是我要做的(为了更容易使用,它需要jQuery): 向所有复选框添加数据属性,将它们与条件配对(如您所说:connect1 to condition1)。 将所有条件存储在对象中,其中键是数据属性中使用的数字: HTML:

<input type="checkbox" data-number="1">

JavaScript的:

var conditions = {
    "1": true //some condition;
}

然后在选中的复选框上保留一个曲目:

var checked = [];
$(".input[type='checkbox']").on("click", function(){
   var number = $(this).attr("data-number");
   var index = checked.indexOf(number);
   if(index > -1){
       arr.splice(index, 1); //delete if already there (unchecked)
   } else {
       arr.push(index); //add if not already there (checked)
   }
});

现在如何确定必须应用的条件: 确保将以下代码放在函数中并在需要检查条件时始终调用它:

var passed = true;
for(var i = 0; i < checked.length && passed; i++){
    passed = conditions[checked[i].toString()]; // Assuming that condition1, ..., condition n must be true
}

if(passed){
    alert("All conditions where true");
} else {
    alert("One condition was false"); 
}

请注意: 您可能希望在检查后立即重新定义条件对象,因为dom操作需要自动更新条件对象。 如果不清楚,请在评论中询问。 这个解决方案具有无限的条件(不超过javascript默认的最高数量但仍然足够)