Проблема в том, что существует несколько задач, поэтому я не могу просто каждый раз создавать дополнительные рандомизаторы в потоке опроса.
Предположим, все мои вопросы представляют собой вопросы-слайдеры:
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);
}
});
});
Я не могу использовать рандомизаторы и создавать дополнительные блоки, потому что у меня слишком много виньеток, чтобы это было осуществимо. Как я могу определить порядок вопросов непосредственно из встроенных данных?