我的表单上有5个复选框,每个复选框都有一个单独的条件来验证。用户可以选择任意数量的复选框。对于每个选中的复选框,我必须执行它的相应条件。 示例
如果是checkbox1,则条件1
如果是checkbox2,则条件为2
如果是checkbox3,则条件为3
如果checkbox1& checkbox2然后条件1&条件2
如果checkbox1& checkbox3然后条件1& condition3
如果checkbox2& checkbox3然后条件2& condition3
依旧...... 直到所有checbox的所有组合
我想避免使用多个if语句,任何人都可以在JavaScript中为我提供更好的逻辑。
TIA
答案 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;
答案 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默认的最高数量但仍然足够)