2013-02-26 43 views
0

我無法弄清楚如何遍歷questionTypes並獲取選定的questionType值。根據選擇的問題類型,我必須爲多選題添加答案,比如在選擇正確答案時,我們提供了四個選項,我們必須選擇哪一個作爲正確答案。如何獲取選定的值

我曾嘗試使用cfswitch,但它似乎並沒有工作:

<html> 
    <head> <script src="http://code.jquery.com/jquery-latest.js"></script></head> 
<body> 
<cfoutput> 


    <cfif not IsDefined('rc.questionType')> 
     <form class="form form-horizontal" action="#buildUrl('question.new')#" method="post"> 
      <input type="hidden" name="surveyId" value="#rc.surveyId#"> 
       <fieldset> 

       <div class="control-group"> 
       <label class="control-label" for="questiontype">Question type</label> 
        <div class="controls"> 
        <select name="questionType" onchange="this.form.submit()"> 
         <option value="0" >Select question type</option> 
        <cfloop query="rc.types"> 
         <option value="#id#">#name#</option> 
        </cfloop> 
        </select> 
        </div> 
       </div> 
       </fieldset> 
     </form> 

    <!--- if question type is defined, display question form ---> 
    <cfelse> 
     <form class="form form-horizontal" action="#buildUrl('question.save')#" method="post"> 
      <input type="hidden" name="id" value="0"> 
      <input type="hidden" name="surveyId" value="#rc.data.fksurveyId#"> 
      <input type="hidden" name="questionTypeId" value="#rc.data.fkquestionTypeId#"> 
      <input type="hidden" name="rank" value="#rc.data.rank#"> 



      <fieldset> 

      <div class="control-group"> 
      <label class="control-label" for="question">Question</label> 
       <div class="controls"> 
        <input class="input-xxlarge" type="text" name="question" id="question" required="true" placeholder="write your question"> 
       </div> 
      </div> 

      <div class="control-group"> 
      <label class="control-label" for="Required">Required</label> 
       <div class="controls"> 
       <select name="Required"> 
        <option value="1" selected>Yes</option> 
        <option value="0">No</option> 
       </select> 
       </div> 
      </div>     



      <!--- question arguments for selected type, this will be for multioption questions ---> 

      <!--- <cfif rc.questiontype is "multiple choice (single selection),Multiple Choice (Multi Selection) with Other,Multiple Choice (Single Selection) with Other,Multiple Choice (Multi Selection)"> ---> 
      <cfswitch expression="#rc.questiontypeid#"> 
       <cfcase value="multiple choice (single selection),Multiple Choice (Multi Selection) with Other,Multiple Choice (Single Selection) with Other,Multiple Choice (Multi Selection)"> 
       <div class="control-group"> 
        <label class="control-label" for="answer">Answer</label> 
         <div class="controls"> 
         <input class="input-xxlarge" type="text" name="new_answer" id="new_answer"> 
         </div> 
       </div> 

       <div class="control-group"> 
        <label class="control-label" for="rank">rank</label> 
         <div class="controls"> 
         <input class="input-mini" type="text" name="rank" id="rank"> 
        </div> 
       </div> 


       <div class="control-group"> 
        <label class="control-label" for="answer">Answer</label> 
         <div class="controls"> 
         <input class="input-xxlarge" type="text" name="new_answer" id="new_answer"> 
         </div> 
       </div> 

       <div class="control-group"> 
        <label class="control-label" for="rank">rank</label> 
         <div class="controls"> 
         <input class="input-mini" type="text" name="rank" id="rank"> 
        </div> 
       </div> 
      </cfcase> 
     </cfswitch> 




      <!--- ---> 
      <div class="form-actions"> 
       <button type="submit" class="btn btn-primary">Save</button> 
       <a href="#buildUrl(action='admin:question.list', querystring='surveyid=#rc.surveyId#')#" class="btn">Cancel</a> 
      </div> 
      </fieldset> 
     </form> 
    </cfif> 
<cfdump var="#rc#"> 

</cfoutput> 
</body> 
</html> 

這是我的控制器方法添加一個新的問題:

<cffunction name="new" returntype="void" access="public"> 
     <cfargument name="rc" type="struct" required="true"> 
     <!---call service to get the textfields, checkboxes etc,. based on questiontype selection ---> 
     <!--- call service to get question types for select box ---> 
     <cfset rc.types = getQuestionService().types()> 
     <cfset rc.action = 'New Question'> 
     <!--- if user select question type ---> 
     <cfif isdefined('arguments.rc.questionType')> 
      <cfset rc.data = getQuestionService().new(arguments.rc.surveyId, arguments.rc.questionType)> 
     </cfif> 
    </cffunction> 

我在單頁兩種形式。在第一種形式中,我選擇了questionType。基於所選的questionType,我必須顯示一個添加問題表單。

+0

昨天你沒問這個問題嗎? – 2013-02-26 18:00:50

+0

是的,我做了,但有人告訴我添加我的條件邏輯,然後再次發佈,這就是我所做的。希望你不介意。 – 2013-02-26 18:07:59

+0

這很好,我不知道我是否瘋了或什麼。 – 2013-02-26 18:24:01

回答

0

由於開關表達式設置爲rc.questiontypeid,因此案例值應爲可能的rc.questiontypeid,而不是問題類型名稱。

1

爲了確保我正在閱讀代碼應該如何工作:

1.這是創建問題的表單,而不是回答它。
2. rc是一個以您的基本問題定義爲關鍵字的結構,您還有其他現有代碼可確保此頁面上存在rc結構。
(而不是isDefined(「rc.questionType」))我會使用structKeyExists(rc,「questionType」),但這是一個完全不同的討論
3.當您更改問題類型的值時,該字段是因爲isDefined('rc.questionType')現在應該是TRUE(將你移動到cfelse塊)
4.你現在被帶回到同一頁面用字段輸入問題,是否需要,並且您正在尋找基於questionType的答案輸入框。

如果所有這些假設都是正確的,那麼這就是您需要循環的一點通過你的答案選項。cfswitch/cfcase是正確的,但s這些多項選擇的選擇將需要稍微不同的處理。具有「其他」選項的人在這一端和回答追蹤結束時需要稍微更多的處理。您必須爲該選中的答案添加一個文本框。

因此,您需要對rc結構中的問題進行更多的定義。你需要跟蹤哪一個是正確答案(一個簡單的複選框)。如果您想允許動態數量的多選答案,您需要跟蹤您需要多少答案。如果您追蹤答案是否爲「其他」,您甚至可以將這些多選答案選項放在一起。這也可以讓你在多項選擇選項中有多個「其他」類型的選擇。當然,這會減少你的選擇,這是否是一個多項選擇題,僅僅是「多項選擇」。讓答案決定是單選還是「其他」選擇。如果您想使用單選按鈕而不是單選框的複選框,您只需計算問題的答案即可。然後你可以單獨擔心每個基本問題類型。

更好地跟蹤答案(正確和「其他」選項)的代碼也需要拉回來,可能在getQuestionService()函數中,這是我假設你拉你的問題定義並填充rc結構。

你打算使用這個表單作爲UPSERT,還是這只是一個INSERT,你會更新/編輯其他地方的問題?

無論如何,回到你原來的問題。我建議的第一件事情是也將cfdump頁面頂部的rc結構。查看您最初使用的數據。

在你需要添加答案的地方,cfswitch是正確的方法。你可能在這裏不符合你的任何案例。在此處輸出rc.questionTypeID以查看您的值。我會用問號類型的整數ID而不是問題類型的名稱。它會提供更快,更精確的處理。當你得到正確的案例時,你需要在這裏查看你的答案。

要選擇哪一個是正確答案,只需在cfif中添加一個selected =「selected」或checked =「checked」(取決於輸入類型),以檢查當前答案是否正確。

+0

rc.questiontype是我正在檢查questionTypeId。你假設是正確的,我正在尋找。我很困惑如何根據選定的questionType來檢查選定的questionType,我應該如何調用字段。感謝您的答覆! – 2013-02-27 08:21:51

+0

我正在使用此表單進行插入。 – 2013-03-01 13:47:50