0

Google マップにマーカーを配置しています。マーカーを表示または非表示にする動的な「and」条件を作成しようとしているフォームに、多数のチェックボックス (現在 19 個) があります。単一のチェックボックスが選択されている場合、コードは個々の部分に対してうまく機能します。複数のチェックボックスが選択されている場合にコードを考慮して、次の条件を満たすマーカーを追加するだけでなく、すべての条件を満たすマーカーのみを表示したいと思います。

ギブンズ:

  1. チェックボックスの ID は「q」+# です
  2. 各 Google マーカーには、各 q#(チェックボックス) に対して true または false の値があります。コードは次のとおりです。 、q13、q14、q15、q16、q17、q18、q19)
  3. マーカーポイントが多い

必要:

チェックボックス 1 と 2 がチェックされている場合、createMarker 変数で q1 = true "および" q2 = true であるマーカーのみが表示されます。ただし、1 つのチェックボックスをオンにして、正しいマーカーを表示できるようにすることもできます。チェックボックスが選択されるすべての可能性 (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 に設定されたマーカーがあるとします。

マーカーの各プロパティを格納する代わりに、10 進数を使用してバイト 1、3、および 5 を設定します。

これにより、バイナリ値が得られます10101(10 進数は です21。マーカー プロパティとして保存します)。

この小数をチェックされたチェックボックスと比較するには、小数も使用し、チェックボックスがチェックされているバイトを設定します。

q1 と q5 のチェックボックスがオンになっていると仮定すると、バイナリ値は10001(decimal 17)になります。

ここでしなければならないことはAND、markers プロパティとcheckboxes-property のビットごとの結果がcheckboxes-property と等しいかどうかを確認することだけです。

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

このアプローチは、最大 32 のプロパティで機能します。

デモ: http://jsfiddle.net/doktormolle/hsPVS/

于 2013-10-23T17:00:00.257 に答える