Timer | XM Community
Skip to main content

Hello, 

I want to do an experiment where the participants see althoghter 8 persons (there are pairs and only one of them is shown) with some characteristics. I want to introduce a timer so that every profile is shown for 6 sec. Before I introduced the timer the survey was working but now not all of the 8 selected participants are shown and sometimes the timer is missing. Do anyone know a mistake? That is my code in the beginning: 

var maleNames = ["Alexander", "Daniel", "Michael", "Christopher", "Samuel", "Adrian", "Timo", "Julian"];
var femaleNames = ["Alexandra", "Danielle", "Michaela", "Christina", "Samantha", "Adriana", "Tina", "Julia"];

// Function to randomly select unique numbers between 0 and 7 (inclusive)
function getRandomIndices() {
    var indices = [];
    while (indices.length < 4) {
        var rand = Math.floor(Math.random() * 8);
        if (!indices.includes(rand)) {
            indices.push(rand);
        }
    }
    return indices;
}

// Get 4 random indices representing selected male names
var selectedIndices = getRandomIndices();

// Create the final list of names by selecting the male or female from each pair
var names = [];
var orderedNames = [];
for (let i = 0; i < 8; i++) {
    if (selectedIndices.includes(i)) {
        names.push(maleNames[i]); // Add male name if index is selected
        orderedNames.push(maleNames[i]); // Store original order as well
    } else {
        names.push(femaleNames[i]); // Add female name if index is not selected
        orderedNames.push(femaleNames[i]); // Store original order as well
    }
}

// Shuffle the final list to randomize the order of male and female names
function shuffle(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
    }
    return array;
}
names = shuffle(names);

// Set a random name for the question
var randomIndex = Math.floor(Math.random() * names.length);
var randomName = names[randomIndex]; // Declare randomName here

// Store the selected random name as an embedded variable
Qualtrics.SurveyEngine.setEmbeddedData('randomName', randomName);

// Store the selected indices as a string to set as an embedded variable
var selectedIndicesString = selectedIndices.join(", ");
Qualtrics.SurveyEngine.setEmbeddedData('selectedIndices', selectedIndicesString);

// Store the ordered names as a string to set as an embedded variable (no shuffle)
var orderedNamesString = orderedNames.join(", ");
Qualtrics.SurveyEngine.setEmbeddedData('OrderedNames', orderedNamesString);

// Set the orderedName1 to orderedName8 embedded variables (without shuffle)
for (let i = 0; i < 8; i++) {
    Qualtrics.SurveyEngine.setEmbeddedData('orderedName' + (i + 1), orderedNames[i]);
    console.log('orderedName' + (i + 1) + ': ' + orderedNames[i]);
}

// Set the embedded variables for name1 to name8 (shuffled)
for (let i = 0; i < 8; i++) {
    Qualtrics.SurveyEngine.setEmbeddedData('name' + (i + 1), names[i]);
    console.log('name' + (i + 1) + ': ' + names[i]);
}

// Create a dropdown list for the question using the displayed names only
Qualtrics.SurveyEngine.addOnload(function () {
    var dropdownQuestion = this.getQuestionContainer().querySelector('select');
    if (dropdownQuestion) {
        // Clear the current options
        dropdownQuestion.innerHTML = '';

        // Create an option for each displayed name (name1 to name8)
        for (var i = 1; i <= 8; i++) {
            var name = "${e://Field/name" + i + "}"; // Access embedded variable for name
            var option = document.createElement('option');
            option.value = name;
            option.text = name;
            dropdownQuestion.add(option);
            console.log('Adding to dropdown: ' + name); // Debugging
        }
    }
});

// Interests section: list of 16 interests
var interestsArray = [
    "Competitive sports",
    "Empathy",
    "Logic",
    "Yoga",
    "Competitiveness",
    "Aesthetics",
    "Hiking",
    "Baking",
    "Quiet",
    "Non-Fiction Books",
    "Entrepreneurship",
    "Communication",
    "Stocks",
    "Ballet",
    "Cooking",
    "Adventure"
];

// Set an embedded variable for each individual interest
Qualtrics.SurveyEngine.setEmbeddedData('Interest1', interestsArray[0]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest2', interestsArray[1]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest3', interestsArray[2]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest4', interestsArray[3]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest5', interestsArray[4]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest6', interestsArray[5]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest7', interestsArray[6]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest8', interestsArray[7]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest9', interestsArray[8]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest10', interestsArray[9]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest11', interestsArray[10]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest12', interestsArray[11]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest13', interestsArray[12]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest14', interestsArray[13]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest15', interestsArray[14]);
Qualtrics.SurveyEngine.setEmbeddedData('Interest16', interestsArray[15]);

// Function to select 3 unique random interests from interestsArray
function getThreeUniqueRandomInterests(array) {
    let interestsCopy = [...array]; // Create a copy of the array to ensure we can remove items
    let selectedInterests = [];
    for (let i = 0; i < 3; i++) {
        let randomIndex = Math.floor(Math.random() * interestsCopy.length);
        selectedInterests.push(interestsCopy[randomIndex]);
        interestsCopy.splice(randomIndex, 1); // Remove the selected interest to prevent duplicates
    }
    return selectedInterests;
}

// Get 3 random unique interests
var randomInterests = getThreeUniqueRandomInterests(interestsArray);

// Store the selected random interests as embedded variables
for (let i = 0; i < 3; i++) {
    Qualtrics.SurveyEngine.setEmbeddedData('RandomInterest' + (i + 1), randomInterests[i]);
}

// Store each individual interest as an embedded variable
for (let i = 0; i < interestsArray.length; i++) {
    Qualtrics.SurveyEngine.setEmbeddedData('Interest' + (i + 1), interestsArray[i]);
}

// Store the full list of interests as a single embedded variable (array format)
Qualtrics.SurveyEngine.setEmbeddedData('AllInterests', interestsArray.join(", "));

// Store the selected indices as a string to set as an embedded variable
var selectedIndicesString = selectedIndices.join(", ");
Qualtrics.SurveyEngine.setEmbeddedData('selectedIndices', selectedIndicesString);

// Store the ordered names as a string to set as an embedded variable (no shuffle)
var orderedNamesString = orderedNames.join(", ");
Qualtrics.SurveyEngine.setEmbeddedData('OrderedNames', orderedNamesString);

// Set the orderedName1 to orderedName8 embedded variables (without shuffle)
Qualtrics.SurveyEngine.setEmbeddedData('orderedName1', orderedNames[0]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName2', orderedNames[1]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName3', orderedNames[2]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName4', orderedNames[3]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName5', orderedNames[4]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName6', orderedNames[5]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName7', orderedNames[6]);
Qualtrics.SurveyEngine.setEmbeddedData('orderedName8', orderedNames[7]);

// Set the embedded variables for name1 to name8 (shuffled)
Qualtrics.SurveyEngine.setEmbeddedData('name1', names[0]);
Qualtrics.SurveyEngine.setEmbeddedData('name2', names[1]);
Qualtrics.SurveyEngine.setEmbeddedData('name3', names[2]);
Qualtrics.SurveyEngine.setEmbeddedData('name4', names[3]);
Qualtrics.SurveyEngine.setEmbeddedData('name5', names[4]);
Qualtrics.SurveyEngine.setEmbeddedData('name6', names[5]);
Qualtrics.SurveyEngine.setEmbeddedData('name7', names[6]);
Qualtrics.SurveyEngine.setEmbeddedData('name8', names[7]);

Be the first to reply!