Рандомизация порядка вопросов Qualtrics внутри блока на основе встроенных данныхJAVA

Программисты JAVA общаются здесь
Anonymous
Рандомизация порядка вопросов Qualtrics внутри блока на основе встроенных данных

Сообщение Anonymous »

Я программирую опрос Qualtrics. У меня есть несколько блоков, и я хочу один раз рандомизировать порядок вопросов внутри блока, чтобы порядок сохранялся на протяжении всего опроса.
Проблема в том, что существует несколько задач, поэтому я не могу просто каждый раз создавать дополнительные рандомизаторы в потоке опроса.
Предположим, все мои вопросы представляют собой вопросы-слайдеры:
task1_support: Насколько вы поддержите партию?
task1_like: Насколько вам нравится вечеринка?
task1_help: Насколько бы вы помогли партии?
которые идут после виньетки с партией:
vignette1: «Партия X делает Y в стране Z...»
И затем для других задач я задаю то же самое:
vignette2: "Партия J делает K в стране L..."
task2_support: Насколько вы поддержите партию?
task2_like: Насколько вам нравится партия?
task2_help: Насколько бы вы помогли партии?
Я хочу установить встроенные данные, подобные следующим:
outcome_order = {support_like_help, support_help_like, Like_help_support, Like_support_help, help_support_like, help_like_support
Я случайным образом выбираю один из этих 6 вариантов, определяя порядок. Предположим, я выбираю «like_help_support». Затем для каждой задачи я должен увидеть:
Виньетка1:
task1_like: Насколько вам нравится вечеринка?
task1_help: Насколько бы вы помогли партии?
task1_support: Насколько бы вы поддержали вечеринку?
Виньетка2:
task2_like: Как насколько вам нравится вечеринка?
task2_help: Насколько бы вы помогли партии?
task2_support: Насколько бы вы поддержали вечеринку?
Я попробовал отредактировать js для пустого предыдущего вопроса в блоке, как показано ниже:

Код: Выделить всё

Qualtrics.SurveyEngine.addOnReady(function() {

var self = this;
var outcomeOrderStr = "${e://Field/outcome_order}";

// Debug line - check if embedded data is piping in
console.log("Order is: " + outcomeOrderStr);

if (!outcomeOrderStr || outcomeOrderStr.indexOf('Field') > -1) {
console.warn("Embedded data not piping correctly");
return;
}

var orderArray = outcomeOrderStr.split('_');
console.log("Order array: " + orderArray);

// ---- STRATEGY: find questions by QID ----
// In Qualtrics, every question block has an ID like "QID123"
// Your export tags (conjoint_1_med_conf etc.) appear in the QID div
// We search all QuestionOuter divs and match by export tag in the id attribute directly

var allQuestions = jQuery('.QuestionOuter');
console.log("Total questions found: " + allQuestions.length);

allQuestions.each(function(i) {
console.log("Q" + i + " id=" + jQuery(this).attr('id'));
});

// Map your tokens to export tag fragments
// Try multiple possible patterns Qualtrics might use
var tagMap = {
"like":  ["like",  "task_1_like"],
"support":  ["support",  "task_1_support"],
"help": ["help", "task_1_help"]
};

function findQuestion(key) {
var patterns = tagMap[key];
var found = null;

// Try 1: match against the QuestionOuter id attribute
jQuery('.QuestionOuter').each(function() {
var id = jQuery(this).attr('id') || '';
for (var p = 0; p < patterns.length; p++) {
if (id.indexOf(patterns[p]) > -1) {
found = jQuery(this);
return false;
}
}
});
if (found) { console.log("Found " + key + " by ID"); return found; }

// Try 2: match anywhere in the full HTML of the QuestionOuter
jQuery('.QuestionOuter').each(function() {
var html = jQuery(this).html() || '';
for (var p = 0; p < patterns.length; p++) {
if (html.indexOf(patterns[p]) > -1) {
found = jQuery(this);
return false;
}
}
});
if (found) { console.log("Found " + key + " by HTML"); return found; }

console.warn("Could not find question for: " + key);
return null;
}

// Set up flex container
var container = jQuery(self.getQuestionContainer()).closest('.QuestionOuter').parent();
console.log("Container tag: " + container.prop('tagName') + " id=" + container.attr('id'));
container.css({ "display": "flex", "flex-direction": "column" });

// Pin dummy to top
jQuery(self.getQuestionContainer()).closest('.QuestionOuter').css("order", "0");

// Apply order
orderArray.forEach(function(key, index) {
var q = findQuestion(key);
if (q) {
q.css("order", (index + 1) * 10);
console.log("Set order " + ((index+1)*10) + " for " + key);
}
});

});
Однако из-за этого иногда отображается один из результатов, а в других случаях ничего не отображается. Поэтому этот код не работает.
Я не могу использовать рандомизаторы и создавать дополнительные блоки, потому что у меня слишком много виньеток, чтобы это было осуществимо. Как я могу определить порядок вопросов непосредственно из встроенных данных?

Вернуться в «JAVA»