如何获取所选值

时间:2013-02-26 16:59:04

标签: coldfusion coldfusion-9

我无法弄清楚如何循环遍历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,我必须显示一个添加问题表单。

2 个答案:

答案 0 :(得分:1)

为了确保我正在阅读此代码应该如何工作:

这是一个创建问题的表单,而不是回答它。
2. rc是一个以您的基本问题定义为关键字的结构,并且您有其他现有代码可确保此页面上存在rc结构。
(而不是isDefined(“rc.questionType”)我会使用structKeyExists(rc,“questionType”),但这是一个完全不同的讨论。
3.当您更改问题类型的值时,该字段将被提交回来,其他代码会创建并填充rc struct的questionType键。所以isDefined('rc.questionType')现在应该为TRUE(将你带到cfelse块)。
4.现在您带回一个字段的相同页面输入问题,是否需要,并且您正在寻找基于questionType的答案输入框。

如果所有这些假设都是正确的,那么您需要循环选择答案。 cfswitch / cfcase是正确的,但是这些多选项中的一些将需要稍微不同地处理。具有“其他”选项的选项在此端和答案跟踪端需要稍微多一些处理。您必须为选中的答案添加一个文本框。

因此,您需要对rc结构中的问题进行更多定义。您需要跟踪哪一个是正确的答案(一个简单的复选框)。如果您想允许动态数量的多项选择答案,则需要跟踪您需要的答案数量。如果您跟踪答案是否为“其他”,您甚至可以将这些多项选择答案选项保持在一起。这还允许您在多选项中选择多个“其他”类型。当然,这会减少您选择是否只是一个多选题,只需“多选”。让答案确定它是单选还是“其他”选择。如果您想使用单选按钮而不是单个选项的复选框,您只需要计算问题的答案。然后你可以单独担心每个基本的问题类型。

更好地跟踪答案的代码(正确和“其他”选项)也需要撤回,可能是在getQuestionService()函数中,我假设你正在提取你的问题定义和填充rc结构。

您是否计划将此表格用作UPSERT,或者这只是一个INSERT,您会在其他地方更新/编辑问题吗?

无论如何,回到原来的问题。我建议的第一件事就是在页面顶部cfdump rc结构。查看您最初使用的数据。

在需要添加答案的地方,cfswitch是正确的方法。您可能无法在此处匹配任何案例。在此处输出rc.questionTypeID以查看您的值。我会使用问题类型的整数ID而不是问题类型的名称。它将提供更快,更精确的处理。当你得到正确的案例时,你需要在这里讨论你的答案。

要选择哪一个是正确的,只需在cfif中添加selected =“selected”或checked =“checked”(取决于输入类型),检查当前答案是否是正确答案。

答案 1 :(得分:0)

由于switch表达式设置为rc.questiontypeid,因此案例值应该是可能的rc.questiontypeid,而不是问题类型名称。