在Qualtrics调查中,单击下一个按钮时,如何将对项目的响应保存到嵌入数据中
In Qualtrics Surveys, how can you save the response to an item into embedded data when the next button is clicked?
实际上,我只是花了很长时间从参差不齐的文档和大量的Web控制台检查中拼凑出这个问题的答案。由于到目前为止最有用的信息来自Stack Overflow,我想把这个问题及其答案放在这里,以便将来搜索其他任何人。
问题是,如何将javascript添加到一个问题中,从而立即将该问题的答案保存到嵌入式数据字段中?立即,就像在,而不是等到下一个Qualtrics.SurveyEngine.AddOnLoad()。这涉及到一个子问题,即如何将javascript添加到调查问题中,并在单击"下一步"按钮时使其运行?以及子问题,如何保存根据问题ID动态命名的嵌入式数据字段?
Caveat Emptor:Qualtrics没有明确支持所有这些JavaScript黑客攻击,因此此处的代码最终可能会停止工作。
下面介绍如何获取滑块的响应值并将其保存在嵌入的数据字段中,其名称根据问题 ID 进行编号。仅当滑块的文本输入框可见时,此方式才有效。如果没有这个,可能也有一种方法可以做到这一点,也许其他人可以将其添加到答案中。
Qualtrics.SurveyEngine.addOnload(function()
{
// everything here runs when the page is loaded. So, we can get the Question ID here,
// but we can't get the response value until later.
var currentQuestionID = this.getQuestionInfo().QuestionID
//var resultEmbeddedName = currentQuestionID + "_result" //e.g. QID6_result
var resultEmbeddedName = "result_" + currentQuestionID.substring(3) //e.g. result_6
$('NextButton').onclick = function (event) {
// everything in here will run when you click the next button
// note that it has access to javascript variables from the enclosing function
// however, if you declare something in here with "var" then it will be a LOCAL variable
// the following alert will appear when you click the next button. For me, it appears twice;
// I'm not sure why.
// Save the current question's response value
var responseTextField = document.getElementById(currentQuestionID + '~1~result')
var currentResponse = responseTextField.value
alert("Result: " + currentResponse + "'nwill be available to future questions as: 'n$" + "{e://Field/" + resultEmbeddedName + "}")
Qualtrics.SurveyEngine.setEmbeddedData(resultEmbeddedName, currentResponse)
// and now run the event that the normal next button is supposed to do
Qualtrics.SurveyEngine.navClick(event, 'NextButton')
}
});
对于多项选择题,它有点复杂。 这是有效的代码,其中包含大量注释和演示。请注意,变量"currentResponse"最终保存所选选项的NUMBER,而"currentChoiceText"最终保存该选项的文本标签(例如Yes或No)。因此,您可以保存您喜欢的任何一种。
Qualtrics.SurveyEngine.addOnload(function()
{
// everything here runs when the page is loaded. So, we can get the Question ID here,
// but we can't get the response value until later.
var currentQuestionID = this.getQuestionInfo().QuestionID
console.log("Current Question ID is: " + currentQuestionID)
//var resultEmbeddedName = currentQuestionID + "_result" //e.g. QID6_result
var resultEmbeddedName = "result_" + currentQuestionID.substring(3) //e.g. result_6
$('NextButton').onclick = function (event) {
// everything in here will run when you click the next button
// note that it has access to javascript variables from the enclosing function
// however, if you declare something in here with "var" then it will be a LOCAL variable
// the following alerts will appear when you click the next button. For me, it appears twice;
// I'm not sure why.
// Save the current question's response value
var questionObject = Qualtrics.SurveyEngine.getInstance(currentQuestionID)
var currentResponse = questionObject.getSelectedChoices()[0] //in case more than one is selected, it will only work here to take one!
var theQuestionInfo=questionObject.getQuestionInfo()
var choicesObject=theQuestionInfo.Choices
var thisChoiceObject=choicesObject[currentResponse]
var currentChoiceText=thisChoiceObject.Text
console.log("Number of the current choice is " + currentResponse)
console.log("Text of the current choice is " + currentChoiceText)
alert("Result: " + currentChoiceText + "'nwill be available to future questions as: 'n$" + "{e://Field/" + resultEmbeddedName + "}")
Qualtrics.SurveyEngine.setEmbeddedData(resultEmbeddedName, currentChoiceText)
// and now run the event that the normal next button is supposed to do
Qualtrics.SurveyEngine.navClick(event, 'NextButton')
}
});
这两个都动态引用问题 ID,因此如果您将问题复制到新问题,它们将单独工作。 无需更改任何 JavaScript 代码。
要测试这些,请制作滑块问题或多项选择题并添加相应的 javascript。然后,在分页符后制作另一张幻灯片(分页符是导致出现"下一步"按钮所必需的)。在该幻灯片中,放置一个管道文本字段(如 ${e://Field/result_1})或警报对话框告诉您保存的值的任何内容。 预览调查时,您应该会在第二个问题的管道文本字段中看到在第一个问题上输入的值。
就此演示而言,您当然可以通过管道文本实现相同的效果。但是,如果您有某种原因希望问题实际上立即将其响应保存到嵌入式数据中,这将为您做到这一点。
此外,如果您需要知道如何在单击"下一步"按钮时运行代码,这可以适应任何一般需求。
我在$('NextButton').onclick方法中调用以下代码会强制$('NextButton').onclick方法调用两次时遇到问题。 删除它对我有用,因此 onclick 方法只被调用一次,但仍会推进调查。
// and now run the event that the normal next button is supposed to do
Qualtrics.SurveyEngine.navClick(event, 'NextButton')
每次按"下一步"按钮时,这都有效。希望对您有所帮助!
Qualtrics.SurveyEngine.addOnload(function(){
var nextButton =document.getElementById("NextButton");
if (nextButton!=null){
$("NextButton").on("click", function(event) {
alert("Hello World!");
});
}
});
- 正在将数据主题添加到所有项目
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何检查管道中未定义的项目
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 学生搜索项目jquery/javascript
- 如何获取不属于我项目的上一页的URL
- 在上一次响应时隐藏Qualtrics项目-Javascript
- Javascript-响应式商店;多个项目-每个项目具有不同的价格值
- 谷歌表单:将项目添加到响应中
- 在 Angular 项目中迭代 JSON 响应以创建新的 $scope obj 我可以在应用程序中使用的
- 可以'在sails.js+angularjs项目中无法使DataTables响应
- 改进RoR项目的时间响应
- 如何在响应式网站中正确布局网格项目
- 如何停止具有混合高度、一列或两列、Bootstrap旋转木马项目的反弹响应页面
- 如何在响应式jCarousel上选择可见项目的数量
- 我将项目推入数组,但脚本变得无响应
- 修复了当项目数量超过容器宽度时的动态响应导航
- 在Qualtrics调查中,单击下一个按钮时,如何将对项目的响应保存到嵌入数据中
- 当我在下拉菜单中选择一个项目时,响应不带javascript
- ngOptions尝试将资源响应用作所选项目时的怪异行为