2016-03-05 55 views
-3

我有3個HTML頁面,其中2頁各有問題1和問題2。第3頁顯示測試的分數。我設計了網頁,現在我想跟蹤用戶分數。我不允許使用本地存儲,Cookie,數據庫或會話。我想將變量(追蹤每個用戶的答案)從一個html頁面傳遞到另一個頁面,而不使用本地存儲或會話,cookie或數據庫。無法從JavaScript傳遞後檢索變量

現在在我的外部js文件中,有功能getAnswer1(form)它存儲用戶答案並將數組傳遞到quiz_2.html file。我在網上找到一個例子來傳遞一個變量,但在第二個函數getAnswer2(form)中檢索數組時遇到了問題,並且存儲了用戶的第二個輸入。我該如何解決這個問題?

HTML頁面1: 第一頁用戶選擇2個答案。簡單填寫空白問題並檢索答案。正如你所看到的,我用correct分配了正確答案。

<div> 
       <form> 
        <input type="radio" name="one" value="correct" class="firstRow">&nbsp;Option 1 Mark 1: $650 
        <input type="radio" name="two" value="correct" class="secondRow">&nbsp;Option 1 Mark 2: Twitter<br> 
        <input type="radio" name="one" value="incorrect" class="firstRow">&nbsp;Option 2 Mark 1:$550 
        <input type="radio" name="two" value="incorrect" class="secondRow">&nbsp;Option 2 Mark 2:Google<br> 
        <input type="radio" name="one" value="incorrect" class="firstRow">&nbsp;Option 3 Mark 1:$650 
        <input type="radio" name="two" value="incorrect" class="secondRow">&nbsp;Option 3 Mark 2:$650<br> 

        <input type="button" value="Submit & Next Question" onclick="getAnswer1(this.form)" class="firstRow"> 
        <input type="button" value="Cancel & Clear Selection" onclick="clearOptions(this.form)"> 
       </form> 
      </div> 

我有一個外部js文件,其中包含存儲答案和執行必要計算的功能。我將用戶答案存儲在一個數組中。我打電話的第一個函數:

function getAnswer1(form) { 
    var results = []; 
    var a = []; 
    var value; 

    var checked = form.querySelectorAll("input[type=radio]:checked"); 

    if(checked.length<2) { 
     alert('Please select an option'); 
      return; 
     } 
else { 
     var n = checked.length; 
      for(var i=0;i<n;i++) { 
      a.push(checked[i].value); 
      } 
     } 
     results.push(encodeURIComponent('key')+'='+encodeURIComponent(a)) 
     location.href = 'quiz_2.html?'+results.join('&'); 
    } 

第二個問題:

<div> 
       <form> 
        <input type="radio" name="radio" value="correct" class="firstRow"> NASA.Gov 
        <input type="radio" name="radio" value="incorrect" class="secondRow"> Data.Gov <br> 
        <input type="radio" name="radio" value="incorrect" class="firstRow"> Facebook 
        <input type="radio" name="radio" value="incorrect" class="secondRow"> XYZ.net <br> 

        <input type="button" value="Submit & Next Question" onclick="getAnswer2(this.form)" class="firstRow"> 
        <input type="button" value="Cancel & Clear Selection" onclick="clearOptions(this.form)" class="secondRow"> 


       </form> 
      </div> 

的Javascript:

正如你可以看到下面在這裏我應該接受用戶的第二次測試輸入,並且報告最終成績到調查但難以檢索數組變量並存儲答案。

function getAnswer2(form) { 
    var value; 
    var retrieveArray = {}; 
    var fs = location.search.replace('?', '').split('&'); 
    for(var i=0,l=fs.length; i<l; i++){ 
    var z = fs[i].split('='); 
    retrieveArray[decodeURIComponent(z[0])] = decodeURIComponent(z[1]); 
    } 
    var checked = form.querySelector("input[type=radio]:checked"); 
    if(!checked){ 
     alert('Please select an option'); 
     } 
    else{ 
     value = checked.value; 
     } 
    location.href = "survey.html"; 
} 
+0

首先我想確認我的理解。您想要在不使用任何類型的存儲從一個頁面到另一個頁面的情況下傳遞分數。在這裏,我建議你不要使用單獨的頁面,而是使用嚮導。您可以在一個頁面中獲得所有數據。 – Dhaval

+0

@Dhaval我不允許使用本地,會話,cookies或數據庫。將變量從一個頁面傳遞到另一個頁面是必需的。我想出的唯一方法是存儲數組中的每個答案,並將數組變量從一頁傳遞到另一頁,以便在末尾引用該數組來計算分數 – user3497437

+0

是的,我理解了這一點。但是我的觀點來自你的基地。爲什麼要使用單獨的頁面,而您可以輕鬆地使用嚮導進行集成和管理。這對你的目標也很容易。 – Dhaval

回答

-1

很抱歉,如果我的意見似乎苛刻,但我所有關於新程序員學習基礎知識本身,而不依賴於具有提供的答案。只是爲了表明它可以完成 - 我剛剛創建了三個HTML頁面。在前兩個表單中創建一個表單 - 每個表單都包含您的問題(第一頁中的問題1和問題2,第二頁中的問題3),然後將表單值傳遞給下一個表單值,僅使用html。

然後在第二頁和第三頁上只使用JavaScript,我從URL中獲取值並對它們做了一些操作。在第二頁中,我重新使用了第1頁中的值(想想如何完成以及爲什麼它有用),以便將所有三個值傳遞給第3頁,然後使用JavaScript僅抓取3個值,顯示它們在頁面上(如下面的代碼部分所示)並計算正確答案的總數和百分比。請注意,我回答了問題,因此我得到的問題2不正確。

請注意,我是而不是給出了使用的代碼,但會給你頁面的URL,以便您可以看到前兩頁的結果,然後可以開始思考我是如何實現這一目標的。

numbers1.html 
numbers2.html?one=correct&two=incorrect 
numbers3.html?one=correct&two=incorrect&three=correct 

Question 1: correct 

Question 2:incorrect 

Question 3:correct 

2/3 

0.67% correct 

不是傳統意義上的答案,我知道,但對於學習者只是要求要提供的答案,尤其是在10分鐘內我能所取得的成果的三個頁面放在一起是不理想的。如果你不嘗試,那麼你不會爲自己學習。

一般注意:兩個論壇成員,我花了很多時間在今天下午試圖幫助OP與所需的代碼 - 給出的代碼示例。所以這篇文章更多的是關於教學而不是提供答案。我希望我有這樣的老師來激發研究和理解,然後再問問答案。所以,現在我已經說過了 - 隨意投票,但我支持我的理念,不會刪除這個答案,只是爲了不接受低價。此論壇必須是教學環境以及代碼庫。

+0

它看起來像你打算把它放在別處 - 現在[你已經這樣做](http://stackoverflow.com/a/35813699/472495)你會刪除這一個? – halfer

+0

不 - 我在這個頁面上回復了這個用戶的答案 - 懷疑它是與另一個用戶相同的用戶,但它是一個不同的用戶(具有相同的問題,例如另一個海報的同學問題) 。然後在其他頁面上發佈相同的答案,以防它是不同的用戶。同樣的答案 - 可能是兩張海報......或者只是一張海報。順便說一句 - 抱歉的錯誤 - 我沒有意識到,有人編輯蹩腳的打字 - 我會更準確的帖子,以防止你必須清理我的蹩腳的打字。謝謝 – gavgrif

+0

啊,如果問題是相同的(如果兩者都使用相同的答案),那麼也許一個人應該與另一個相同。我會看一看。請注意,我們通常不希望多次發佈相同的東西,因爲任何改進都需要重複。 – halfer