Как да кодирате в LimeSurvey, така че нов ред да се появява само когато предишният ред е попълнен

Използвам LimeSurvey и искам да включа въпрос, на който респондентът може да включи до 30 имена като отговор. Въпреки това, не искам първоначално да представя на респондента 30 полета, тъй като това е огромно и изисква много превъртане, за да продължите, ако имате само няколко имена за въвеждане. Възможно ли е да кодирате въпроса, така че ново поле да се появява само след попълване на предишното поле? Благодаря.


person zgall1    schedule 16.10.2013    source източник


Отговори (4)


РЕДАКТИРАНЕ: Този отговор беше написан, защото не можах да намеря отговора, представен от tpartner предварително. Основната разлика е, че моят се основава на попълване на предишния ред, а този на tpartner върху бутони за добавяне или премахване на редове.

Следният код трябва да работи за всички масиви с един избор (напр. масив от 5-точкова скала) и е адаптивен към други типове, ако знаете малко Javascript/jQuery. Искам да правя още такива неща - само не днес. Така че не се колебайте да поискате реализации за други типове въпроси.

Кодът може да се добави в началото на файла template.js с помощта на редактора на шаблони. Променливите "quest" и "first" трябва да бъдат адаптирани въз основа на вашето проучване.

//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

С Най-Добри Пожелания

person Chonez    schedule 08.01.2014

Ето друг подход, който използва бутони за добавяне/премахване на редовете на масива - http://manual.limesurvey.org/Workarounds:_Manipulating_a_survey_at_runtime_using_Javascript#Variable_Length_Array_.28Multi_Flexible_Text.29_question

наздраве

person tpartner    schedule 09.01.2014

Кой тип въпроси планирате да използвате? Най-добрият ви залог, според мен, трябва да бъде да използвате въпрос с няколко кратки текста и да създадете 30 текстови полета. След това можете да използвате javascript, за да скриете тези текстови полета и да ги покажете веднага щом предишното текстово поле получи някаква стойност като вход.

наздраве!

person Amit Kumar    schedule 17.10.2013
comment
В момента използвам този тип въпроси. Как да добавя Javascript към анкетата? - person zgall1; 18.10.2013
comment
Страхотен!! Трябва да проверите кой шаблон използвате. Ако е по подразбиране, тогава трябва да поставите кода си във файла template.js, присъстващ в шаблона по подразбиране. Обикновено се предлага да се създаде копие на шаблона с различно име и да се промени template.js на този конкретен шаблон. - person Amit Kumar; 18.10.2013
comment
manual.limesurvey.org/wiki/ - person Amit Kumar; 18.10.2013

С версия 2.x (не знам коя версия започва да позволява това, аз използвам 2.7 и тя работи там), тази функционалност е вградена чрез уравнението за релевантност и не изисква кодиране. Просто въведете !is_empty(questioncode_Code) в уравнението за релевантност за текстовото поле, което искате да оставите да се показва. Code е кодът на полето едно над което се задейства появата.

person fry    schedule 02.10.2017
comment
Страхотно, и да, от някои версии: наистина лесно за използване Уравнение за релевантност на подвъпрос. Най-добре е да използвате (за SQ2) : !is_empty(questioncode_SQ1.NAOK) && !is_empty(questioncode_SQ2.NAOK) else : ако потребителят изтрие SQ1 : той изтрива отговорите в SQ2 ;) - person Denis Chenu; 03.10.2017
comment
@DenisChenu: отлично допълнение. Малка корекция, вярвам, че трябва да бъде !is_empty(questioncode_SQ1.NAOK) или !is_empty(questioncode_SQ2.NAOK). Не &&. - person fry; 10.11.2017