2012-01-13 84 views
2

基本上,我有一個調查問卷,這是非常動態的&數據驅動的性質......JQuery多維數組或其他方法?

對於每個問題,我可以有一個 題號, 0或多個選項的單選按鈕, 0或複選框更多的選擇, 然後每個選項的單選按鈕,我將有一個 選項ID, 值 併爲每個選項複選框,我將有一個 選項ID, 值 並且因爲這是一個textarea每個選項我將有一個 選項ID, 值 如果我沒有選擇,我可以有一個是沒有單選按鈕組,這將有 問題ID, 值 如果我沒有選擇我也可以有一個文本,這將有
問題ID, 值

我所擁有的一切使我想要的方式和我的變化,並單擊jQuery的事件被射擊時我希望他們...

問題在我的JQuery此刻我想揪出一種方法來保存所有這些問題的答案,因爲他們被回答,如果他們改變更新或取代我以前存儲的...

一旦用戶完成了答案和編輯(如適用),我將在我的基於mvc3的解決方案中將jquery/json發佈到我的控制器中;如果我能得到我的什麼樣的Jquery的結構,我需要做到這一點想通了,我好去...

的方法來做到這一點的jQuery是讓我頭疼所需的結構...

在我想到的是沿着以下線的東西的那一刻...

var $ArrayToPost = []; 

    var $questionare = 
    { 
     Questions: { 
      QuestionNumber: null, 
      Options: [], 
      YesNo: [], 
      TextArea: [] 
     } 
    }; 

    $('input.Questionare, textarea.Questionare').live({ 
     click: function (e) { 
     ...rest omitted for brevity... 
     $questionare.Questions.QuestionNumber = $QuestionNbr; 
     $questionare.Questions.Options.push($CheckBox); 

     $ArrayToPost.push($questionare); 

     ...rest omitted for brevity... 
     change : function (e) { 
     ...rest omitted for brevity... 
    }); 

的問題,我有這種做法是隻要單擊一個複選框,單選按鈕或值的文本改變我不得不弄清楚我已經在結構中添加了適用的問題編號,並更新任何適用的或者只是替換w帽子是適用...

我覺得我在這個複雜,並會把握像一個更優雅的方式......

在此先感謝。

UPDATE:仍然沒有想出一個辦法讓這個打算,希望有人可以幫我在正確的方向前進......

回答

0

我不得不做類似的東西了這一點。 如果您是以應用程序的形式進行操作,並且需要離開該頁面......或許看看將答案保存在Cookie中。我會建議一個本地數據庫,但似乎本地數據庫目前正在播出,前進。

如果你留在同一頁面上,那麼JavaScript變量或JavaScript窗口變量是一個想法。然後,在onchange事件中,查看先前保存的值以查看該值是否已更改爲正確答案等。

如果你正在做的是一個網頁而不是一個應用程序,你可以使用php或其他服務器端的東西來存儲對象或數組。

0

我認爲你需要兩個結構。第一個將持有所有的問題和選項,而第二個持有答案。由於您的問題「模板」對於調查的所有參與者都是相同的,因此您可以以JSON格式傳遞該JS對象,並在需要顯示問題和答案組合時使用它。

您使用的第二種結構將僅用於在將它們回發到服務器之前保留答案。見下面我的例子:

首先,保持實際問卷調查對象:

var questionnaire = { 
    Questions : [ 
     { 
      number: 1, 
      type: 'Radio' 
      options: ['Choice 1', 'Choice 2', 'Choice 3'] 
     } 
    ] 
}; 

並在重複對象「的問題:」對於每一個問題。指定一個類型,然後使用你的jQuery代碼來創建合適的收音機,複選框,textarea等元素。很顯然,在某些情況下,「選項」數組是不需要的(例如textarea)。

對於存儲答案,它更容易。只需建立一個陣列並從那裏開始。

var answers = [ 

]; 

function recordAnswer(qNum, answer) { 
    answers[qNum] = answer; 
} 

每一個答案記錄(可以使用「的onchange」事件)時,調用recordAnswer(),並通過在題號和答案提供。用戶更新的任何問題都會自動覆蓋之前的答案。

當您準備好POST數據時,只需將對象轉換爲JSON,並通過適當的jQuery Ajax方法即可。另一方面,如果您需要POST所有內容(包括問題模板),只需遍歷可用問題並在answers數組中找到與當前問題相同編號的元素,然後記錄答案在第一個對象模板中。然後POST到服務器。

這是一對夫婦的做法。希望其中一個適合你:)

+0

我不是很追隨你......我所有的問題都是動態的,我可以有沒有單選按鈕組,以及單選按鈕列表和複選框列表和textareas每個問題我可以在任何給定的時間顯示n個可分頁的問題...我可以靜態定義的數量很少... – user1011144 2012-01-13 16:14:03

+0

我可以看到如何爲一個適用的問題添加0個或多個項目的每個單獨的數組.. 。但我不知道如何進行說,例如我有一個複選框和0或更多文本區域的列表,例如對於同一個問題;當點擊和更改每個事件分別觸發...所以說更改事件觸發,並選中一個複選框並將其值和問題編號添加到我想發佈的過程數組中...然後一些文本是鍵入一個文本框,是同一問題的一部分...如果我添加相同的問題編號和當前值,我將失去信息。 – user1011144 2012-01-13 16:41:53

+0

我的方法仍然適用於您。當記錄你的答案只需要像這樣地址你的數組:答案[qNum] ['textarea'] =答案;因此,每個問題的數據結構如下所示:answer = {0:{textarea:「」,radio:「」}}等等。您可能需要在閱讀問卷時設置結構,但這應該是微不足道的。 – 2012-01-18 22:17:28