2017-03-23 86 views
1

我已經爲測驗創建了一個靜態html頁面。 以下是我的代碼如何使用JavaScript在.txt文件中保存html頁面內容?

<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> 

所有工作正常,但我想保存.txt文件 選中的單選按鈕值和最終的結果,我要保存用戶,並沿所有的答案與正確的和錯了。

+0

保存所有反應變量通過使用 .value;數組,然後最終得分? – Rico

+0

你可以給我代碼 – stone

+0

不行,對不起。你發佈的代碼是給我的毛骨悚然,我不能讀它:)) – Rico

回答

0

注意事項:
- 初始化變量textToSave首先沒有值;
- document.getElementById("question").text;應該是document.getElementById("question").innerHTML;
- 在choose身體,無線電的值添加到變量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文件並下載 - 通過使用JavaScript從web瀏覽器,您可以參照從薩格爾五答案

您不能直接你的答案或任何數據保存到一個文件。

您neeed一個小型服務器,也許在Node.js的,PHP或Java 首先格式的像JSON特定結構的答案和SENE它作爲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); 
} 
相關問題