我在Google地图上放置标记。我有一些复选框(当前19个),我试图创建一个动态“和”条件来显示或不显示标记。选择单个复选框时,代码适用于各个部分。如果选择了多个复选框,我希望将代码考虑在内,只显示符合所有条件的标记,而不仅仅是添加符合下一个条件的标记。
吉文斯:
需要:
如果选中复选框1和2,则只显示createMarker变量中具有q1 = true“和”q2 = true的标记。但是,也允许选中一个复选框并显示正确的标记 我需要这个条件来选择复选框的所有可能性(1到19)。
我该如何做到这一点?
单一条件的当前代码:
//loop through the checkbox questions
for (var h=1; h<20; h++) {
//check to see if the checkbox is checked
if (document.getElementById('q'+h).checked == true) {
for (var i=0; i<gmarkers.length; i++) {
//check to see if the Marker has that variable set to true for the question it is loop through
if (h == 1 && gmarkers[i].q1 == 1) {
\\ show marker
gmarkers[i].show();
}
if (h == 2 && gmarkers[i].q2 == 1) {
// turned off for testing
//gmarkers[i].show();
}
if (h == 3 && gmarkers[i].q3 == 1) {
//gmarkers[i].show();
}
if (h == 4 && gmarkers[i].q4 == 1) {
//gmarkers[i].show();
}
if (h == 5 && gmarkers[i].q5 == 1) {
//gmarkers[i].show();
}
if (h == 6 && gmarkers[i].q6 == 1) {
//gmarkers[i].show();
}
if (h == 7 && gmarkers[i].q7 == 1) {
//gmarkers[i].show();
}
if (h == 8 && gmarkers[i].q8 == 1) {
//gmarkers[i].show();
}
if (h == 9 && gmarkers[i].q9 == 1) {
//gmarkers[i].show();
}
if (h == 10 && gmarkers[i].q10 == 1) {
//gmarkers[i].show();
}
if (h == 11 && gmarkers[i].q11 == 1) {
//gmarkers[i].show();
}
if (h == 12 && gmarkers[i].q12 == 1) {
//gmarkers[i].show();
}
if (h == 13 && gmarkers[i].q13 == 1) {
gmarkers[i].show();
}
if (h == 14 && gmarkers[i].q14 == 1) {
//gmarkers[i].show();
}
if (h == 15 && gmarkers[i].q15 == 1) {
//gmarkers[i].show();
}
if (h == 16 && gmarkers[i].q16 == 1) {
//gmarkers[i].show();
}
if (h == 17 && gmarkers[i].q17 == 1) {
//gmarkers[i].show();
}
if (h == 18 && gmarkers[i].q18 == 1) {
//gmarkers[i].show();
}
if (h == 19 && gmarkers[i].q19 == 1) {
//gmarkers[i].show();
}
}
}
答案 0 :(得分:0)
您不必迭代标记的每个q属性的方法:
使用按位操作。
假设您有一个标记,其属性q1,q3和q5设置为true。
不是存储标记的每个属性,而是使用小数并设置字节1,3和5。
这会产生二进制值10101
(小数为21
,将其存储为标记属性)
要将此十进制数与选中的复选框进行比较,请同时使用小数并设置选中复选框的字节。
假设选中了q1和q5的复选框,则二进制值为10001
(十进制17
)
现在要做的就是检查markers属性的按位AND
和checkboxes-property的结果是否等于checkboxes-property
((21 & 17)>>>0===17)//returns true
此方法最多可用于32个属性。