Qualtrics显示逻辑干扰了javascript .hide()

时间:2018-02-20 18:30:04

标签: javascript qualtrics

我在Qualtrics中有30行并排问题。前20行中的每一行都具有显示逻辑,使得它们仅在先前问题的文本框中输入某些内容时出现。最后10行中的每一行都具有显示逻辑,使得在整个问题中显示至少10行,即,如果没有显示前20个,则行21仅显示,如果仅显示前20个中的一个,则显示第22行...如果显示第一行中的9个,则显示第30行,如果显示第一行中的至少10个,则不会显示任何一行。

问题的第一列是一个复选框,我使用以下Javascript来隐藏最后10行的复选框:

Qualtrics.SurveyEngine.addOnload(function()
{
var qid = this.questionId;
var p = $(qid);
p.down('label[for="QR~'+qid+'#1~21~1"]').hide();
p.down('label[for="QR~'+qid+'#1~22~1"]').hide();
p.down('label[for="QR~'+qid+'#1~23~1"]').hide();
p.down('label[for="QR~'+qid+'#1~24~1"]').hide();
p.down('label[for="QR~'+qid+'#1~25~1"]').hide();
p.down('label[for="QR~'+qid+'#1~26~1"]').hide();
p.down('label[for="QR~'+qid+'#1~27~1"]').hide();
p.down('label[for="QR~'+qid+'#1~28~1"]').hide();
p.down('label[for="QR~'+qid+'#1~29~1"]').hide();
p.down('label[for="QR~'+qid+'#1~30~1"]').hide();
});

如果没有显示前面的行,则它可以正常工作:

enter image description here

但是,如果显示前一行中的一个,则显示炸弹:

enter image description here

我在预览中用Inspect Element查看标签是否以某种方式更改标签,但在更改ID时无法找到任何意外情况。检查第23行上的复选框的元素时,前20行中没有一行出现:

<input id="QR~QID4#1~23~1" name="QR~QID4#1~23~1" value="Selected" 
data-runtime-checked="runtime.Children.1.Choices.23.Answers.1.Selected" 
aria-labelledby="question1QID4 question1QID4-answer1QID4 choice23QID4"
class="QWatchTimer" type="checkbox">

<label for="QR~QID4#1~23~1" class="q-checkbox" data-runtime-class
-q-checked="runtime.Children.1.Choices.23.Answers.1.Selected" 
style="display: none;"></label>

正如预期的那样,标签代码显示为灰色。如果出现前20行中的一行,则大致相同,但最后不会出现style="display: none;"

<input id="QR~QID4#1~23~1" name="QR~QID4#1~23~1" value="Selected" 
data-runtime-checked="runtime.Children.1.Choices.23.Answers.1.Selected" 
aria-labelledby="question1QID4 question1QID4-answer1QID4 choice23QID4"
class="QWatchTimer" type="checkbox">

<label for="QR~QID4#1~23~1" class="q-checkbox" data-runtime-class
-q-checked="runtime.Children.1.Choices.23.Answers.1.Selected"></label>

我对显示逻辑的激活如何干扰Javascript感到茫然。

1 个答案:

答案 0 :(得分:0)

经过几个小时的渗透后,我记得如果显示逻辑用Javascript隐藏了一个项目,那么该脚本将无法运行。我没有意识到它不仅仅是逐行的 - 看起来如果一行代码控制的一个元素被隐藏,整个代码块就会失效。

我能够通过一个动态只考虑将要显示的行的循环来解决它:

Qualtrics.SurveyEngine.addOnload(function()
{
    //Remove checkboxes for last ten options
    var qid = this.questionId;
    var p = $(qid);
    var count = Qualtrics.SurveyEngine.getEmbeddedData('count');
    var min = 21+count;
    for (var i = min; i < 31; i++) {
        p.down('label[for="QR~'+qid+'#1~'+i+'~1"]').hide();
    }
});

至少在我的情况下,count变量用于确定要显示的最后10行中有多少行。一旦我将其构建到循环的参数中,显示逻辑就不会使任何内容失效。 (如果感兴趣的话,请检查here上的流程。)

获得的经验教训:我应该开始使用循环 - 在此之后修改参数是一个简单的步骤。

相关问题