Dear all,
I am design an experiment. My survey question is simple in nature, which is in text-entry type. I have created the html part for the description.
<style>
	.bg_color{
            background-color: #FCFC9C;
        }
    table.centered-table {
        width: 648px;
        margin: auto;
        border-collapse: collapse;
        text-align: center;
    }
    table.centered-table th, table.centered-table td {
        text-align: center;
    }
    table.centered-table th {
        border-bottom: 2px solid black;
		font-weight: bold;
		padding: 20px;
    }
    table.centered-table .border-white {
        border-bottom: 2px solid white;
    }
	table.centered-table .border-light {
        border-bottom: 2px solid #f1f1f1;
    }
    .gray-text { color: gray; }
    .red-text { color: red; }
    .blue-text { color: blue; }
    .transparent-button {
        background-color: transparent;
        border: none;
        padding: 20px;
        cursor: pointer;
    }
</style>
<table class="centered-table">
    <thead>
		<tr>
            <th class="red-text" style="width: 20%;">Set A</th>
            <th class="border-white" style="width: 5%;"> </th>
            <th class="blue-text" style="width: 30%;">Set B</th>
        </tr>
        <tr>
            <th class="red-text" style="width: 20%;">100 Boxes</th>
            <th class="border-white" style="width: 5%;"> </th>
            <th class="blue-text" style="width: 40%;">40 Boxes       60 Boxes</th>
        </tr>
    </thead>
<tbody>
        <tr>
            <td id="a1" class="red-text border-light">
                <button class="transparent-button" style="color: red;">$25.00</button>
            </td>
            <td class="border-white"> </td>
            <td id="b1" class="blue-text border-light">
                <button class="transparent-button" style="color: blue;">$25.00           $0.00</button>
            </td>
        </tr>
        <tr>
            <td id="a2" class="red-text border-light">
                <button class="transparent-button" style="color: red;">$24.00</button>
            </td>
            <td class="border-white"> </td>
            <td id="b2" class="blue-text border-light">
                <button class="transparent-button" style="color: blue;">$25.00           $0.00</button>
            </td>
        </tr>
        <tr>
            <td id="a3" class="red-text border-light">
                <button class="transparent-button" style="color: red;">$23.00</button>
            </td>
            <td class="border-white"> </td>
            <td id="b3" class="blue-text border-light">
                <button class="transparent-button" style="color: blue;">$25.00           $0.00</button>
            </td>
        </tr>
    </tbody>
</table>
I have also finished my JS codes:
Qualtrics.SurveyEngine.addOnload(function()
{
	/*Place your JavaScript here to run when the page loads*/
	var OutputField = document.getElementById("QR~"+this.questionId);
	OutputField.style.display = "none";
    // Get all red and blue buttons
    let red_btns = document.querySelectorAll(".red-text>button");
    let blue_btns = document.querySelectorAll(".blue-text>button");
    // Variables to track the highlighted range
    var xend = 0, yend = 0;
    // Add event listeners to left (red) buttons
    red_btns.forEach((item, i) => {
        // Assign a custom attribute for button identification
        item.setAttribute("left_id", i + 1);
        // Add click event listener for red buttons
        item.addEventListener("click", function (evt) {
            // Get the ID of the clicked button
            xend = +evt.target.getAttribute("left_id");
            // Update background highlights
            refreshBgColor(xend, yend);
        });
    });
    // Add event listeners to right (blue) buttons
    blue_btns.forEach((item, j) => {
        // Assign a custom attribute for button identification
        item.setAttribute("right_id", j + 1);
        // Add click event listener for blue buttons
        item.addEventListener("click", function (evt) {
            let clicked = +evt.target.getAttribute("right_id");
            if (clicked < xend) {
                if (!yend) {
                    yend = xend;
                }
                xend = clicked - 1;
            } else {
                yend = clicked;
            }
            // Update background highlights
            refreshBgColor(xend, yend);
        });
    });
    /**
     * Refresh background color highlights
     * @param {*} xend - Last highlighted left (red) button
     * @param {*} yend - Last highlighted right (blue) button
     */
    function refreshBgColor(xend, yend) {
        let ystart = xend + 1;
        // Highlight left (red) buttons
        setBgRange("red", 1, xend);
        // Highlight right (blue) buttons
        if (yend) {
            setBgRange("blue", ystart, yend);
        }
    }
    /**
     * Highlight background color for a range of buttons
     * @param {string} type - Button type ("red" or "blue")
     * @param {number} start - Starting index
     * @param {number} end - Ending index
     */
    function setBgRange(type, start, end) {
        // Get all buttons of the specified type
        let btns = document.querySelectorAll(`.${type}-text>button`);
        // Clear all previous highlights
        document.querySelectorAll(`.${type}-text`).forEach(e => e.classList.remove("bg_color"));
        // Highlight buttons within the specified range
        btns.forEach(item => {
            // Get the button index based on its attribute
            let index = (type === "red" ? item.getAttribute("left_id") : item.getAttribute("right_id"));
            index = parseInt(index);
            start = parseInt(start);
            end = parseInt(end);
            // Add highlight class if within range
            if (index >= start && index <= end) {
                item.parentElement.classList.add("bg_color");
            }
        });
    }
		//calculate OutputField value
    OutputField.value = end;
});The purpose of my JS codes are mainly two folds:
- Highlighting the choice pattern.
- Record the switch point (from one side to another side), and store it as the output of this entry-text question.
Now, I can see my JS codes work (at least for the highlight function) when I preview this question. However, when I preview the block, which opens a page, the JS part does not work, including the highlighting part.
(I have tried to change addOnload to addOnReady, nothing changes.)
Your answer will be very appreciated. Thank you!
Best,
Elon
