Javascript为复选框条件的所有可能性选择Google标记

时间:2013-10-22 20:52:12

标签: javascript google-maps google-maps-api-3 checkbox google-maps-markers

我在Google地图上放置标记。我有一些复选框(当前19个),我试图创建一个动态“和”条件来显示或不显示标记。选择单个复选框时,代码适用于各个部分。如果选择了多个复选框,我希望将代码考虑在内,只显示符合所有条件的标记,而不仅仅是添加符合下一个条件的标记。

吉文斯:

  1. 复选框ID为“q”+#
  2. 每个Google标记的每个q#(复选框)的值都为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. 有许多标记点
  4. 需要:

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

1 个答案:

答案 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个属性。

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