2016-04-11 8 views
-2

このコードスニペットは、結果として10個の質問を表示し、CSSの.hidemeクラスを通してそれぞれの質問の可視性を操作するために使用されます。次に、メトリクスデータをGoogleアナリティクスに送信します。 これは動作しますが、大きすぎます。私はこのコードをより短く(スマートな)書式で書き直そうとしています。助言がありますか?「if」の短いコード

<script> 
    (function($) { 
    $(":input").change(function(){ 
     $(this).closest("div").addClass("hideMe"); 
     $(this).closest("div").next("div").removeClass("hideMe"); 

     if($('#q2').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 1 Answered'); 
     } 

     if($('#q3').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 2 Answered'); 
     } 

     if($('#q4').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 3 Answered'); 
     } 

     if($('#q5').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 4 Answered'); 
     } 

     if($('#q6').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 5 Answered'); 
     } 

     if($('#q7').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 6 Answered'); 
     } 

     if($('#q8').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 7 Answered'); 
     } 

     if($('#q9').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 8 Answered'); 
     } 

     if($('#q10').is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 9 Answered'); 
     } 

     if($('#results').is(':visible')) { 

      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question 10 Answered'); 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Results displayed'); 

      document.getElementById('answer1').innerHTML = $("input[name=qo1]:checked").val(); 
      document.getElementById('answer2').innerHTML = $("input[name=qo2]:checked").val(); 
      document.getElementById('answer3').innerHTML = $("input[name=qo3]:checked").val(); 
      document.getElementById('answer4').innerHTML = $("input[name=qo4]:checked").val(); 
      document.getElementById('answer5').innerHTML = $("input[name=qo5]:checked").val(); 
      document.getElementById('answer6').innerHTML = $("input[name=qo6]:checked").val(); 
      document.getElementById('answer7').innerHTML = $("input[name=qo7]:checked").val(); 
      document.getElementById('answer8').innerHTML = $("input[name=qo8]:checked").val(); 
      document.getElementById('answer9').innerHTML = $("input[name=qo9]:checked").val(); 
      document.getElementById('answer10').innerHTML = $("input[name=qo10]:checked").val(); 

      document.getElementById('total1').innerHTML = $('input.yes:checked').length; 
      document.getElementById('total2').innerHTML = $('input.yes:checked').length; 

      if($('input.yes:checked').length > 2) 
      { 
      $('#first').hide(); 
      $('#second').show(); 
      } 
      else 
      { 
      $('#first').show(); 
      $('#second').hide();**strong text** 
      } 
     } 
    }); 
    })(jQuery); 
    </script> 
+7

あなたが道を想像できますか?そこに任意のパターンを参照してい['for'ループでパターンを繰り返すのか?](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for) –

+0

' {q5: – tadman

+1

素早く返信してくれてありがとうございます。私はパターンを見ていますが、実際には "for loop"でそれを書く方法はわかりません。 。 – Laziz

答えて

0

$(".checkboxes").each(function(){ 
id = $(this).data("id"); 
if($('#q' + id).is(':visible')) { 
      ga('send', 'event', 'EnglishHearingWidget', 'question', 'Question ' + id + ' Answered'); 
     } 
}); 

を介して各チェックボックスをクラスとループを与える更新

各ラジオボタンにデータID = "QN" を追加します。上記の変更されたコードを使用してください。 div要素は、そのIDとないラジオボタンがありますので、(私は。DATAにATTRを変更。

+0

'#qN'要素がチェックボックスであることをどのように知っていますか? –

+0

ありがとうございました!やってみます。 – Laziz

+0

私は実際に#qNがチェックボックスをラップするdivだと仮定しました。しかし、@Blazemongerは正しいですが、十分な情報が提供されていないため、ほとんどが前提でした。 – imvain2

0

だからあなたはJavascriptでswitch文を使用することができます

switch ($foo) { 
case 'bar': 
    alert('bar'); 
    break; 
case 'bar2' 
    alert('bar2'); 
    break; 
default: 
    alert('foo'); 
} 
関連する問題