Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qualtrics Javascript问题-矩阵表_Javascript_Qualtrics - Fatal编程技术网

Qualtrics Javascript问题-矩阵表

Qualtrics Javascript问题-矩阵表,javascript,qualtrics,Javascript,Qualtrics,我在Qualtrics中遇到了一些问题,某些函数在一个问题中很简单,但在使用矩阵表或并排矩阵时就变得不可能了 1矩阵表中单个字段的内容验证-货币在矩阵表中,您只能检查多个字段的验证并生成单个错误 2基于矩阵表中该行上一字段中的条目的字段所需响应 3在矩阵表中重新编码文本项的值-在矩阵表中似乎没有办法做到这一点。再说一次,一个问题很简单 基本上,如果用户愿意,我希望他们能够只完成矩阵表中的一行,但是对于他们完成的行,我需要验证特定字段,并要求对特定字段做出响应,还可能重新编码他们的文本条目 有没有

我在Qualtrics中遇到了一些问题,某些函数在一个问题中很简单,但在使用矩阵表或并排矩阵时就变得不可能了

1矩阵表中单个字段的内容验证-货币在矩阵表中,您只能检查多个字段的验证并生成单个错误

2基于矩阵表中该行上一字段中的条目的字段所需响应

3在矩阵表中重新编码文本项的值-在矩阵表中似乎没有办法做到这一点。再说一次,一个问题很简单

基本上,如果用户愿意,我希望他们能够只完成矩阵表中的一行,但是对于他们完成的行,我需要验证特定字段,并要求对特定字段做出响应,还可能重新编码他们的文本条目

有没有一种简单的方法可以用Javascript来代替呢


谢谢…

我想JavaScript会处理好的。至少可以说,Qualtrics中的验证功能是有限的,因此我不得不编写几个脚本

根据Qualtrics验证选项的设置方式,您可能需要使用Qualtrics JavaScript中的函数。下面是您将使用的基本结构。我对你的资格问题ID一无所知,我使用了占位符

更新:我建议使用并列问题类型。 这里有一个

为了让你开始,这里是第一个学生的代码。你需要为2-5年级的学生复制相同的模式。你可以通过验证风格的在线消息和弹出窗口来使用很多方法,我甚至都没去过。您可以在Qualtrics中为两个电子邮件列的内容验证下选择电子邮件验证。您也可以选择电话号码验证。这里的验证只会阻止用户进入下一页,直到他们满足所有标准。您可以在问题主体中解释验证标准

我使用的问题id列在第一位,与屏幕截图中项目的位置完全对应,除了Y/N问题,它与并列问题不同,id QR~QID95~1~1表示是,QR~QID95~1~2表示否。我不知道您在Firebug方面有什么技能,但您需要找到与您的具体问题相关,并用它们替换下面的问题

我还建议使用嵌入的数据变量来输入答案,以便在下载中有清晰易读的数据。根据我的记忆,Qualtrics矩阵的结构和并行数据不是很有用

希望这对你有意义。如果没有,请询问。我从个人经验中知道,找到javascript对Qualtrics的支持是多么令人沮丧

Qualtrics.SurveyEngine.addOnload(function () {
/*Place Your Javascript Below This Line*/

//QR~QID9#1~1~1~TEXT - QR~QID9#2~1~1~TEXT - QR~QID9#3~1~1~TEXT - QR~QID9#4~1~1~TEXT - QR~QID9#5~1~1/QR~QID9#5~1~2 - QR~QID9#6~1~1~TEXT
//QR~QID9#1~2~1~TEXT - QR~QID9#2~2~1~TEXT - QR~QID9#3~2~1~TEXT - QR~QID9#4~2~1~TEXT - QR~QID9#5~2~1/QR~QID9#5~2~2 - QR~QID9#6~2~1~TEXT
//QR~QID9#1~3~1~TEXT - QR~QID9#2~3~1~TEXT - QR~QID9#3~3~1~TEXT - QR~QID9#4~3~1~TEXT - QR~QID9#5~3~1/QR~QID9#5~3~2 - QR~QID9#6~3~1~TEXT
//QR~QID9#1~4~1~TEXT - QR~QID9#2~4~1~TEXT - QR~QID9#3~4~1~TEXT - QR~QID9#4~4~1~TEXT - QR~QID9#5~4~1/QR~QID9#5~4~2 - QR~QID9#6~4~1~TEXT
//QR~QID9#1~5~1~TEXT - QR~QID9#2~5~1~TEXT - QR~QID9#3~5~1~TEXT - QR~QID9#4~5~1~TEXT - QR~QID9#5~5~1/QR~QID9#5~5~2 - QR~QID9#6~5~1~TEXT

var notvalidphbook1 = 0, notvalidphbook2 = 0, notvalidphbook3 = 0, notvalidphbook4 = 0, notvalidphbook5 = 0;
var phsbooks; //gets sum of notvalidphbook items

var bookrecode1, bookrecode2, bookrecode3, bookrecode4, bookrecode5;

var notvalidemail1 = 0, notvalidemail2 = 0, notvalidemail3 = 0, notvalidemail4 = 0, notvalidemail5 = 0;
var emails; //gets sum of notvalidemail items

var validates; //validation variable that decides if user proceeds or not

Qualtrics.SurveyPage.Question.prototype.validate = function (element) {

    //Student name entered
    var student1y = $('QR~QID9#1~1~1~TEXT').getValue();
    var student2y = $('QR~QID9#1~2~1~TEXT').getValue();
    var student3y = $('QR~QID9#1~3~1~TEXT').getValue();
    var student4y = $('QR~QID9#1~4~1~TEXT').getValue();
    var student5y = $('QR~QID9#1~5~1~TEXT').getValue();

    //Student phone number
    var student1phone = $('QR~QID9#2~1~1~TEXT').getValue();
    var student2phone = $('QR~QID9#2~2~1~TEXT').getValue();
    var student3phone = $('QR~QID9#2~3~1~TEXT').getValue();
    var student4phone = $('QR~QID9#2~4~1~TEXT').getValue();
    var student5phone = $('QR~QID9#2~5~1~TEXT').getValue();

    //Emails match
    var student1emailA = $('QR~QID9#3~1~1~TEXT').getValue();
    var student1emailB = $('QR~QID9#4~1~1~TEXT').getValue();
    var student2emailA = $('QR~QID9#3~2~1~TEXT').getValue();
    var student2emailB = $('QR~QID9#4~2~1~TEXT').getValue();
    var student3emailA = $('QR~QID9#3~3~1~TEXT').getValue();
    var student3emailB = $('QR~QID9#4~3~1~TEXT').getValue();
    var student4emailA = $('QR~QID9#3~4~1~TEXT').getValue();
    var student4emailB = $('QR~QID9#4~4~1~TEXT').getValue();
    var student5emailA = $('QR~QID9#3~5~1~TEXT').getValue();
    var student6emailB = $('QR~QID9#4~5~1~TEXT').getValue();

    //Student book needs
    var student1booky = $('QR~QID9#5~1~1').getValue();
    var student1bookn = $('QR~QID9#5~1~2').getValue();
    var student2booky = $('QR~QID9#5~2~1').getValue();
    var student2bookn = $('QR~QID9#5~2~2').getValue();
    var student3booky = $('QR~QID9#5~3~1').getValue();
    var student3bookn = $('QR~QID9#5~3~2').getValue();
    var student4booky = $('QR~QID9#5~4~1').getValue();
    var student4bookn = $('QR~QID9#5~4~2').getValue();
    var student5booky = $('QR~QID9#5~5~1').getValue();
    var student6bookn = $('QR~QID9#5~5~2').getValue();

    //Student book name
    var student1bookname = $('QR~QID9#6~1~1~TEXT').getValue();
    var student2bookname = $('QR~QID9#6~2~1~TEXT').getValue();
    var student3bookname = $('QR~QID9#6~3~1~TEXT').getValue();
    var student4bookname = $('QR~QID9#6~4~1~TEXT').getValue();
    var student5bookname = $('QR~QID9#6~5~1~TEXT').getValue();

    if (student1y == '') {
        //alert("no name provided, no other info needed");
        //"no name provided, no other info needed"

    } else if (student1y != '' && (student1phone == '' || (student1emailA == '' || student1emailB == '') || (student1booky == null && student1bookn == null))) {
        //alert("you need to provide a phone number and enter the student's book needs");
        notvalidphbook1 = 1;    
    } 

           else if (student1y != '' && (student1phone != '' && (student1emailA != '' && student1emailB != '') && (student1booky == null && student1bookn == null))) {

  notvalidphbook1 = 0;
             else {
        //alert("thank you for providing a phone number and specifying book needs");
        if (student1booky == 'QR~QID9#5~1~1') {
            bookrecode1 = 'Y';
        } else {
            bookrecode1 = 'N';
        }
    }

    if (student1emailA == '' && student1emailB == '') {
        //alert("no email provided, no match needed");
        //"no email provided, no match needed"

    } else if (student1emailA != '' && student1emailA == student1emailB) {
        //alert("the emails match");
        //"the emails match"
                    notvalidemail1 = 0;

    } else {
        //alert("the emails don't match");
        //"the emails don't match"
        notvalidemail1 = 1;
    }

    Qualtrics.SurveyEngine.setEmbeddedData('Student1Name', student1y);
    Qualtrics.SurveyEngine.setEmbeddedData('Student1Phone', student1phone);
    Qualtrics.SurveyEngine.setEmbeddedData('Student1Email', student1emailA);
    Qualtrics.SurveyEngine.setEmbeddedData('Student1Txt', bookrecode1);
    Qualtrics.SurveyEngine.setEmbeddedData('Student1TxtName', student1bookname);

    phsbooks = notvalidphbook1 + notvalidphbook2 + notvalidphbook3 + notvalidphbook4 + notvalidphbook5;
    emails = notvalidemail1 + notvalidemail2 + notvalidemail3 + notvalidemail4 + notvalidemail5;

    validates = phsbooks + emails;

    if (validates == 0) { //validates only if the sum is equal to zero
        return true; //this let's the user continue
    } else {
        return false; //this prevents the user from proceeding to the next page
    }

}
});

谢谢你的回复。下面是我正在使用的快照:因此,id想要做的是1使第2-5列成为必需的,但前提是填写了第1列的名称。这样,用户可以在表单中提交1-5中任意数量的学生条目,并且他们提交的条目需要第2-5列的回复。2验证电子邮件地址是否为实际电子邮件地址。3验证重新输入的电子邮件地址是否与第一个电子邮件地址匹配。4将此问题选为是/否,并将条目重新编码为“Y”或“N”。矩阵表当前使您为所有字段选择相同的字段类型。@655321,我正试图实现与您上述建议类似的逻辑,但是,尽管每次提交页面时都会执行问题的验证函数,并且验证失败,返回false,这并不妨碍我进入下一页。是否还有其他需要与上述内容结合才能实现的功能?skyork,您是否需要或要求使用任何类型的验证?如果是,则会干扰此解决方案。它使用相同的函数,并且所需或请求的Qualtrics验证优先于或覆盖您放置的任何内容:Qualtrics.SurveyPage.Question.prototype.validate=function元素{。最好不要使用问题选项中的任何类型的验证,只需在问题javascript中进行完全定制。我已经学到了艰苦的方法。@655321,在我的情况下,这一定是必需的验证。我在尝试时曾怀疑过这一点,但现在你已经确认了。不过,如果我想在jav中完成所有操作,请ascript,如何利用validate函数返回的值阻止用户转到下一个问题/页面?