我有一些更大的形式,有很多收音机和复选框,等等。我正在执行几项检查,以根据用户输入返回不同的消息。我很好。总共有9种不同的场景,我目前将它们存储为单个变量中的真或假:
var scenario_one;
var scenario_two;
var scenario_three;
var scenario_four;
var scenario_five;
var scenario_six;
var scenario_seven;
var scenario_eight;
var scenario_nine;
$('input:radio[name="opt1"]').change(function(){
if($(this).val() == 'Yes'){
scenario_one = true;
} else {
scenario_one = false;
};
});
// ... and so on until all scenarios are checked ...
现在我的问题是:我如何检查是否有两个或更多的vars设置为" true" ?所以我可以这样做:
$('.button').click(function(){
if ( /* Check if 2 oder more of var are set true */ ){
alert('Some nice alert message');
};
});
感觉这不应该太难,但我对这个想法已经不多了。
答案 0 :(得分:0)
最好用一组布尔值替换你的变量来动态控制它。
/*Replace all your variables with this*/
var scenarios = []
$('input:radio[name="opt1"]').change(function(){
/* This will assign true/false to scenario[1]*/
scenario[1] = ($(this).val() == 'Yes');
});
/* so on for the other scenarios*/
/* Then, when you need it... */
if (countTrue(scenario) >= 2) {
alert("Two or more scenarios are true!");
}
countTrue
function countTrue(arr) {
var count = 0;
arr.forEach(function(el){
if(el){
count += 1;
}
}
return count;
}
答案 1 :(得分:0)
你应该使用数组来实现这一目标
类似的东西:
var scenarios = [];
$('input:radio').change(function(){
//get the number of the scenario to change
var scenario = $(this).attr("name").substr($(this).attr("name").length - 1);
if($(this).val() == 'Yes'){
scenarios[scenario] = true;
} else {
scenarios[scenario] = false;
};
});
$('#button').click(function(){
var count = 0;
for (i = 0; i < scenarios.length; i++) {
//if scenario equals true add to counter
if(scenarios[i] == true)
count++;
//if counter is equal or superior to 2 alert and stop the for loop
if(count >= 2){
alert('Some nice alert message');
break;
}
}
});
working jsFiddle - 已更新