0

我正在使用 LimeSurvey,我想包含一个问题,其中受访者最多可以包含 30 个姓名作为答案。但是,我不想一开始就向受访者展示 30 个框,因为它太庞大了,并且如果您只有几个名字要输入,则需要大量滚动才能继续。是否可以对问题进行编码,以便仅在前一个框被填充后才会出现一个新框?谢谢。

4

4 回答 4

3

这是另一种使用按钮添加/删除数组行的方法 - http://manual.limesurvey.org/Workarounds:_Manipulating_a_survey_at_runtime_using_Javascript#Variable_Length_Array_.28Multi_Flexible_Text.29_question

干杯

于 2014-01-09T13:02:43.400 回答
1

编辑:写这个答案是因为我找不到 tpartner 事先提出的​​答案。主要区别在于我的基于填写前一行和 tpartner 的 on 按钮来添加或删除行。

以下代码应该适用于所有单选数组(例如 5 点比例数组),并且如果您了解一些 Javascript/jQuery,则适用于其他类型。我想做更多这样的事情——只是今天不行。因此,请随时询问其他问题类型的实现。

可以使用模板编辑器将代码添加到 template.js 文件的开头。变量“任务”和“第一”必须根据您的调查进行调整。

//Function to only display a new row if there is an answer in the previous row
//NOTICE: Rows which are reset to "No answer" will not be hidden
//NOTICE: This scipt was written based on LimeSurvey 2.00+ build 131107
//NOTICE: It only works for single-choice arrays (e.g. 5-point scale array) or multiple short texts
//BEGIN
$(document).ready( function() {
    //SGQ code of the question to apply this to
    var quest = "12345X1234X12345";
    //A(nswer) code of the first row
    var first = "1";

    //hide all rows except the first
    $("tr[id^='javatbd" + quest + "']").css("display","none");
    $("tr[id='javatbd" + quest + first + "']").css("display","table-row");

    //display rows if previous is answered
    $("[name^='" + quest + "']").change(function() {
        if(this.value.trim().length >= 1)
            $("tr[id='javatbd" + this.name + "']").next().css("display","table-row");
    });
});
//END

此致

于 2014-01-08T17:58:28.487 回答
1

您打算使用哪种问题类型?根据我的说法,你最好的选择应该是使用多个短文本类型的问题并创建 30 个文本框。然后,您可以使用 javascript 隐藏这些文本框,并在前一个文本框获得一些值作为输入时立即显示它们。

干杯!

于 2013-10-17T21:28:28.123 回答
1

使用 2.x 版本(不确定哪个版本开始允许这样做,我正在运行 2.7 并且它在那里工作),此功能是通过相关方程内置的,不需要编码。只需输入!is_empty(questioncode_Code)要让其出现的文本框的相关等式即可。Code是触发外观的第一字段的代码。

于 2017-10-02T09:45:34.943 回答