0

我在谷歌地图上放置标记。我有许多复选框(目前有 19 个),我试图创建一个动态的“和”条件来显示或不显示标记。选择单个复选框时,该代码非常适合各个部分。如果选择了多个复选框,我希望代码考虑在内,并且只显示满足所有条件的标记,而不仅仅是添加满足下一个条件的标记。

吉文斯:

  1. 复选框 ID 为“q”+#
  2. 每个 Google 标记对于每个 q#(checkbox) 都有 true 或 false 值,代码如下: createMarker(point,html,q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12 ,q13,q14,q15,q16,q17,q18,q19)
  3. 有很多标记点

需要:

如果选中复选框 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();           
                }


            }

        }
4

1 回答 1

0

一种不必遍历标记的每个 q 属性的方法:

使用按位运算。

假设您有一个标记,其属性 q1、q3 和 q5 设置为 true 。

不要存储标记的每个属性,而是使用小数并设置字节 1,3 和 5。

这将产生二进制值10101(十进制为21,将其存储为标记属性)

要将此小数与选中的复选框进行比较,还可以使用小数并设置选中复选框的字节。

假设 q1 和 q5 的复选框被选中,二进制值将是10001(decimal 17)

您现在要做的就是检查AND标记属性和复选框属性的按位结果是否等于复选框属性

((21 & 17)>>>0===17)//returns true

这种方法最多可用于 32 个属性。

演示:http: //jsfiddle.net/doktormolle/hsPVS/

于 2013-10-23T17:00:00.257 回答