在qualtrics循环和合并块中使用javascript随机加载图像

时间:2017-08-22 07:12:52

标签: javascript qualtrics

我正在以质量方式创建一项调查。我创建了一个块并使用了循环和合并。在每次迭代中,将加载一个图像并使用javascript显示。第一张图像正确显示。但是从第二次迭代开始,图像开始消失。可以看出图像已加载,因为我只能在加载问题时看到它们,但随后图像消失。

如何解决此问题?我做错了什么?

以下是我的代码:

Qualtrics.SurveyEngine.addOnload(function()
{
    var count =  Number("${e://Field/count}");

    var dirs = ["sensitive-text", "sensitive-notext", "nonsensitive-text", "nonsensitive-notext"]

    var seq =  "${e://Field/sequence}";

    curStr = seq.split(",")[count]
    cur = Number(curStr)

    dir = dirs[0];
    if (cur >= 100 && cur<200)
    {
        dir = dirs[1];
    }
    else if (cur >= 200 && cur < 300)
    {
        dir = dirs[2];
    }
    else if (cur>=300 )
    {
        dir = dirs[3];
    }

    path = "https://juhu.soic.indiana.edu/rakhasan/picshare/" + dir+"/"+curStr+".jpg";
    var img = document.getElementById("img");
    img.src=path;
    img.style.display = 'block'
    img.style.height = '1000px'
    img.style.width="700px"

    Qualtrics.SurveyEngine.setEmbeddedData("count", count+1) ;
});

Seq是一个嵌入式数据字段,每个试验都会随机化。

1 个答案:

答案 0 :(得分:2)

经过一些测试后,似乎将页面转换设置为无将解决您遇到的问题。如果您已设置转换,则替代解决方案是将所有添加的代码放在setTimeout块中。问题是上一页的id =&#39; img&#39;当第二页的代码运行时,元素将被加载。这是由于在新页面加载时加载上一页的过渡效果引起的。

以下是适用的更新代码:

&#13;
&#13;
Qualtrics.SurveyEngine.addOnload(function () {
	setTimeout(function () {
		var count = Number("${e://Field/count}");

		var dirs = ["sensitive-text", "sensitive-notext", "nonsensitive-text", "nonsensitive-notext"]

		var seq = "${e://Field/sequence}";

		curStr = seq.split(",")[count]
		cur = Number(curStr)

		dir = dirs[0];
		if (cur >= 100 && cur < 200) {
			dir = dirs[1];
		} else if (cur >= 200 && cur < 300) {
			dir = dirs[2];
		} else if (cur >= 300) {
			dir = dirs[3];
		}

		path = "https://juhu.soic.indiana.edu/rakhasan/picshare/" + dir + "/" + curStr + ".jpg";
		var img = document.getElementById("img");
		img.src = path;
		img.style.display = 'block'
		img.style.height = '1000px'
		img.style.width = "700px"

		Qualtrics.SurveyEngine.setEmbeddedData("count", count + 1);
	}, 500);
});
&#13;
&#13;
&#13;