2017-03-23 7 views
1

私はクイズの静的HTMLページを作成しました。続き は、私は、ユーザーが、正しいと一緒にすべての答えを保存したい .txtファイルにすべてが正常に動作しているが、私がチェックし、ラジオボタンの値と最終結果を保存したい私のコードJavaScriptを使用してHTMLページコンテンツを.txtファイルに保存する方法は?

<style> 
    body { 
font-family: Open Sans; 
} 
#quiz {display:none;} 
#prev {display:none;} 
#start {display:none;} 
#submit{display:none;} 
ul{list-style:outside none none; margin:0px; padding:0px;} 
.question>div>div>div>p{ color: #fff; 
background-color: #337ab7; 
padding: 6px; 
border-radius: 3px;} 
.navbar-default {background-color: #fff;border-color: #ddd; border-radius:0px;} 
</style> 
<body> 
<div class='container question'> 
    <div class='row'> 
     <div class='col col-md-12' id='quiz'> 
     </div> 
    </div> 
</div> 

<div class='container question' > 
<div class='row' id='quiz'> 
</div> 
</div> 
<br/> 
<div class='container'> 
      <a href='#' class='btn btn-md btn-default pull-right' id='next'>Next</a> 
      <a href='#' class='btn btn-md btn-default pull-left' id='prev'>Prev</a> 
      <a href='#' class='btn btn-md btn-default' id='start'>Start Over</a> 


     <div class='button' id='submit' style='display:none;'> 
      <input type='text' placeholder='Name' id="inputFileNameToSaveAs"/> 
      <button type='submit' class='btn btn-success' onclick="saveTextAsFile()">Submit</button> 
     </div> 
</div> 

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script> 

    <script type="text/javascript"> 


    function saveTextAsFile() 
    { 
    var textToSave = document.getElementById("question").text; 
    var textToSaveAsBlob = new Blob([textToSave], {type:"text/plain"}); 
    var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob); 
    var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value; 

    var downloadLink = document.createElement("a"); 
    downloadLink.download = fileNameToSaveAs; 
    downloadLink.innerHTML = "Download File"; 
    downloadLink.href = textToSaveAsURL; 
    downloadLink.onclick = destroyClickedElement; 
    downloadLink.style.display = "none"; 
    document.body.appendChild(downloadLink); 

    downloadLink.click(); 
    } 

    function destroyClickedElement(event) 
    { 
     document.body.removeChild(event.target); 
    } 

    function loadFileAsText() 
    { 
     var fileToLoad = document.getElementById("fileToLoad").files[0]; 

     var fileReader = new FileReader(); 
     fileReader.onload = function(fileLoadedEvent) 
     { 
      var textFromFileLoaded = fileLoadedEvent.target.result; 
      document.getElementById("inputTextToSave").value = textFromFileLoaded; 
     }; 
     fileReader.readAsText(fileToLoad, "UTF-8"); 
    } 

       (function() { 
     var questions = [ 
     { 
     question: "Which one is correct?", 
     choices: ['a!=b', 'a=!b', 'a:=b', 'a=-b'], 
     correctAnswer: 0 
     }, 

     ]; 

     var questionCounter = 0; //Tracks question number 
     var selections = []; //Array containing user choices 
     var quiz = $('#quiz'); //Quiz div object 

     // Display initial question 
     displayNext(); 

     // Click handler for the 'next' button 
     $('#next').on('click', function (e) { 
     e.preventDefault(); 

     // Suspend click listener during fade animation 
     if(quiz.is(':animated')) {   
      return false; 
     } 
     choose(); 

     // If no user selection, progress is stopped 
     if (isNaN(selections[questionCounter])) { 
      alert('Please make a selection!'); 
     } else { 
      questionCounter++; 
      displayNext(); 
     } 
     }); 

     // Click handler for the 'prev' button 
     $('#prev').on('click', function (e) { 
     e.preventDefault(); 

     if(quiz.is(':animated')) { 
      return false; 
     } 
     choose(); 
     questionCounter--; 
     displayNext(); 
     }); 

     // Click handler for the 'Start Over' button 
     $('#start').on('click', function (e) { 
     e.preventDefault(); 

     if(quiz.is(':animated')) { 
      return false; 
     } 
     questionCounter = 0; 
     selections = []; 
     displayNext(); 
     $('#start').hide(); 
     }); 

     // Animates buttons on hover 
     $('.button').on('mouseenter', function() { 
     $(this).addClass('active'); 
     }); 
     $('.button').on('mouseleave', function() { 
     $(this).removeClass('active'); 
     }); 

     // Creates and returns the div that contains the questions and 
     // the answer selections 
     function createQuestionElement(index) { 
     var qElement = $('<div>', { 
      id: 'question' 
     }); 

     var header = $('<p>Question ' + (index + 1) + '</p>'); 
     qElement.append(header); 

     var question = $('<h3>').append(questions[index].question); 
     qElement.append(question); 

     var radioButtons = createRadios(index); 
     qElement.append(radioButtons); 

     return qElement; 
     } 

     // Creates a list of the answer choices as radio inputs 
     function createRadios(index) { 
     var radioList = $('<ul>'); 
     var item; 
     var input = ''; 
     for (var i = 0; i < questions[index].choices.length; i++) { 
      item = $('<li>'); 
      input = '<input type="radio" name="answer" value=' + i + ' />'; 
      input += questions[index].choices[i]; 
      item.append(input); 
      radioList.append(item); 
     } 
     return radioList; 
     } 

     // Reads the user selection and pushes the value to an array 
     function choose() { 
     selections[questionCounter] = +$('input[name="answer"]:checked').val(); 
     } 

     // Displays next requested element 
     function displayNext() { 
     quiz.fadeOut(function() { 
      $('#question').remove(); 

      if(questionCounter < questions.length){ 
      var nextQuestion = createQuestionElement(questionCounter); 
      quiz.append(nextQuestion).fadeIn(); 
      if (!(isNaN(selections[questionCounter]))) { 
       $('input[value='+selections[questionCounter]+']').prop('checked', true); 
      } 

      // Controls display of 'prev' button 
      if(questionCounter === 1){ 
       $('#prev').show(); 
      } else if(questionCounter === 0){ 

       $('#prev').hide(); 
       $('#next').show(); 
      } 
      }else { 
      var scoreElem = displayScore(); 
      quiz.append(scoreElem).fadeIn(); 
      $('#next').hide(); 
      $('#prev').hide(); 
      $('#start').show(); 
      $('#submit').show(); 
      } 
     }); 
     } 

     // Computes score and returns a paragraph element to be displayed 
     function displayScore() { 
     var score = $('<h4>',{id: 'question'}); 

     var numCorrect = 0; 
     for (var i = 0; i < selections.length; i++) { 
      if (selections[i] === questions[i].correctAnswer) { 
      numCorrect++; 
      } 
     } 

     score.append('You got ' + numCorrect + ' questions out of ' + 
        questions.length + ' right!!!'); 
     return score; 
     } 
    })(); 


    </script> 
     </body> 

です間違っている。

+0

にラジオの値を追加 - document.getElementById("question").text;document.getElementById("question").innerHTML;
であるべき .valueを使用して、配列にして最終的なスコア? – Rico

+0

あなたは私にコード – stone

+0

を教えてもらえますか?申し訳ありません。あなたが投稿したコードは、私がうんざりを与えている、私はそれを読むことができません:)) – Rico

答えて

0

注意点:
- 変数textToSaveを最初に値なしで初期化します。
- 、chooseのボディにすべてreponsesを保存する変数textToSave

そして結果

var textToSave=''; 
 
function saveTextAsFile() 
 
    { 
 
    textToSave += ". Final Result : "+document.getElementById("question").innerHTML; 
 
    var textToSaveAsBlob = new Blob([textToSave], {type:"text/plain"}); 
 
    var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob); 
 
    var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value; 
 

 
    var downloadLink = document.createElement("a"); 
 
    downloadLink.download = fileNameToSaveAs; 
 
    downloadLink.innerHTML = "Download File"; 
 
    downloadLink.href = textToSaveAsURL; 
 
    downloadLink.onclick = destroyClickedElement; 
 
    downloadLink.style.display = "none"; 
 
    document.body.appendChild(downloadLink); 
 

 
    downloadLink.click(); 
 
    } 
 

 
    function destroyClickedElement(event) 
 
    { 
 
     document.body.removeChild(event.target); 
 
    } 
 

 
    function loadFileAsText() 
 
    { 
 
     var fileToLoad = document.getElementById("fileToLoad").files[0]; 
 

 
     var fileReader = new FileReader(); 
 
     fileReader.onload = function(fileLoadedEvent) 
 
     { 
 
      var textFromFileLoaded = fileLoadedEvent.target.result; 
 
      document.getElementById("inputTextToSave").value = textFromFileLoaded; 
 
     }; 
 
     fileReader.readAsText(fileToLoad, "UTF-8"); 
 
    } 
 

 
       (function() { 
 
     var questions = [ 
 
     { 
 
     question: "Which one is correct?", 
 
     choices: ['a!=b', 'a=!b', 'a:=b', 'a=-b'], 
 
     correctAnswer: 0 
 
     }, 
 

 
     ]; 
 

 
     var questionCounter = 0; //Tracks question number 
 
     var selections = []; //Array containing user choices 
 
     var quiz = $('#quiz'); //Quiz div object 
 

 
     // Display initial question 
 
     displayNext(); 
 

 
     // Click handler for the 'next' button 
 
     $('#next').on('click', function (e) { 
 
     e.preventDefault(); 
 

 
     // Suspend click listener during fade animation 
 
     if(quiz.is(':animated')) {   
 
      return false; 
 
     } 
 
     choose(); 
 

 
     // If no user selection, progress is stopped 
 
     if (isNaN(selections[questionCounter])) { 
 
      alert('Please make a selection!'); 
 
     } else { 
 
      questionCounter++; 
 
      displayNext(); 
 
     } 
 
     }); 
 

 
     // Click handler for the 'prev' button 
 
     $('#prev').on('click', function (e) { 
 
     e.preventDefault(); 
 

 
     if(quiz.is(':animated')) { 
 
      return false; 
 
     } 
 
     choose(); 
 
     questionCounter--; 
 
     displayNext(); 
 
     }); 
 

 
     // Click handler for the 'Start Over' button 
 
     $('#start').on('click', function (e) { 
 
     e.preventDefault(); 
 

 
     if(quiz.is(':animated')) { 
 
      return false; 
 
     } 
 
     questionCounter = 0; 
 
     selections = []; 
 
     displayNext(); 
 
     $('#start').hide(); 
 
     }); 
 

 
     // Animates buttons on hover 
 
     $('.button').on('mouseenter', function() { 
 
     $(this).addClass('active'); 
 
     }); 
 
     $('.button').on('mouseleave', function() { 
 
     $(this).removeClass('active'); 
 
     }); 
 

 
     // Creates and returns the div that contains the questions and 
 
     // the answer selections 
 
     function createQuestionElement(index) { 
 
     var qElement = $('<div>', { 
 
      id: 'question' 
 
     }); 
 

 
     var header = $('<p>Question ' + (index + 1) + '</p>'); 
 
     qElement.append(header); 
 

 
     var question = $('<h3>').append(questions[index].question); 
 
     qElement.append(question); 
 

 
     var radioButtons = createRadios(index); 
 
     qElement.append(radioButtons); 
 

 
     return qElement; 
 
     } 
 

 
     // Creates a list of the answer choices as radio inputs 
 
     function createRadios(index) { 
 
     var radioList = $('<ul>'); 
 
     var item; 
 
     var input = ''; 
 
     for (var i = 0; i < questions[index].choices.length; i++) { 
 
      item = $('<li>'); 
 
      input = '<input type="radio" name="answer" value=' + i + ' />'; 
 
      input += questions[index].choices[i]; 
 
      item.append(input); 
 
      radioList.append(item); 
 
     } 
 
     return radioList; 
 
     } 
 

 
     // Reads the user selection and pushes the value to an array 
 
     function choose() { 
 
     selections[questionCounter] = +$('input[name="answer"]:checked').val(); 
 
     textToSave += "Choosen Value : "+selections[questionCounter]; 
 
     } 
 

 
     // Displays next requested element 
 
     function displayNext() { 
 
     quiz.fadeOut(function() { 
 
      $('#question').remove(); 
 

 
      if(questionCounter < questions.length){ 
 
      var nextQuestion = createQuestionElement(questionCounter); 
 
      quiz.append(nextQuestion).fadeIn(); 
 
      if (!(isNaN(selections[questionCounter]))) { 
 
       $('input[value='+selections[questionCounter]+']').prop('checked', true); 
 
      } 
 

 
      // Controls display of 'prev' button 
 
      if(questionCounter === 1){ 
 
       $('#prev').show(); 
 
      } else if(questionCounter === 0){ 
 

 
       $('#prev').hide(); 
 
       $('#next').show(); 
 
      } 
 
      }else { 
 
      var scoreElem = displayScore(); 
 
      quiz.append(scoreElem).fadeIn(); 
 
      $('#next').hide(); 
 
      $('#prev').hide(); 
 
      $('#start').show(); 
 
      $('#submit').show(); 
 
      } 
 
     }); 
 
     } 
 

 
     // Computes score and returns a paragraph element to be displayed 
 
     function displayScore() { 
 
     var score = $('<h4>',{id: 'question'}); 
 

 
     var numCorrect = 0; 
 
     for (var i = 0; i < selections.length; i++) { 
 
      if (selections[i] === questions[i].correctAnswer) { 
 
      numCorrect++; 
 
      } 
 
     } 
 

 
     score.append('You got ' + numCorrect + ' questions out of ' + 
 
        questions.length + ' right!!!'); 
 
     return score; 
 
     } 
 
    })();
<style> 
 
    body { 
 
font-family: Open Sans; 
 
} 
 
#quiz {display:none;} 
 
#prev {display:none;} 
 
#start {display:none;} 
 
#submit{display:none;} 
 
ul{list-style:outside none none; margin:0px; padding:0px;} 
 
.question>div>div>div>p{ color: #fff; 
 
background-color: #337ab7; 
 
padding: 6px; 
 
border-radius: 3px;} 
 
.navbar-default {background-color: #fff;border-color: #ddd; border-radius:0px;} 
 
</style> 
 
<body> 
 
<div class='container question'> 
 
    <div class='row'> 
 
     <div class='col col-md-12' id='quiz'> 
 
     </div> 
 
    </div> 
 
</div> 
 

 
<div class='container question' > 
 
<div class='row' id='quiz'> 
 
</div> 
 
</div> 
 
<br/> 
 
<div class='container'> 
 
      <a href='#' class='btn btn-md btn-default pull-right' id='next'>Next</a> 
 
      <a href='#' class='btn btn-md btn-default pull-left' id='prev'>Prev</a> 
 
      <a href='#' class='btn btn-md btn-default' id='start'>Start Over</a> 
 

 

 
     <div class='button' id='submit' style='display:none;'> 
 
      <input type='text' placeholder='Name' id="inputFileNameToSaveAs"/> 
 
      <button type='submit' class='btn btn-success' onclick="saveTextAsFile()">Submit</button> 
 
     </div> 
 
</div> 
 

 
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script> 
 

 

 
     </body>

+0

thxは私のために働く – stone

0

エンドユーザーではなく、自分でデータを保存するとします。

あなたはtxtファイルを生成し、それをダウンロードするために探している場合 - あなたはサーガルV.

からの回答を参照することができますが、直接WebブラウザからJavaScriptを使用して、ファイルにあなたの答えやどんなデータを保存することはできません。

あなたはJSONのような特定の構造にあなたの答えかもしれないのNode.js、PHPやJava まず形式で、小さなサーバーをneeedし、あなたのパラメータを解析し、ANに保存し、サーバーでPOSTリクエストメソッドのパラメータとして

それをセネ必要なファイル

0
function downloadFile(filename, content) { 
    var element = document.createElement('a'); 
    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content)); 
    element.setAttribute('download', filename); 

    element.style.display = 'none'; 
    document.body.appendChild(element); 

    element.click(); 

    document.body.removeChild(element); 
} 
関連する問題