Form Field Character Limit Placeholder & Counter in NSTE | Experience Community
Skip to main content
Solved

Form Field Character Limit Placeholder & Counter in NSTE

  • April 15, 2026
  • 1 reply
  • 21 views

Forum|alt.badge.img+2

In the legacy survey taking experience, I’m able to use the code here:

 

However, this code does not work in the new survey taking experience (NSTB). Can anyone provide code that I can use to do the same thing in NSTB?

Best answer by vgayraud

Hi,

Here’s ​@Deepak function adapted for NSTE. In addition, limits are specified individually at the top.

Qualtrics.SurveyEngine.addOnload(function () {

var limits = [50, 0, 200]; // one per input, in order. 0 means no limit.
var inputs = document.querySelectorAll("#question-" + this.questionId + " .choice-te-wrapper .text-input");

inputs.forEach(function (input, i) {

var maxChars = limits[i] || 0;
if (maxChars === 0) return;

input.placeholder = maxChars + " character limit.";

var display = document.createElement("div");
display.style.cssText = "visibility:hidden; padding-top:4px;";
display.innerHTML = "Characters remaining: <span class='charCount'>" + maxChars + "</span>";
input.closest(".choice-te-wrapper").insertAdjacentElement("afterend", display);

input.addEventListener("input", function () {
var remaining = maxChars - input.value.length;
if (remaining < 0) {
input.value = input.value.substring(0, maxChars);
remaining = 0;
}
display.style.visibility = input.value.length > 0 ? "visible" : "hidden";
display.querySelector(".charCount").textContent = remaining;
});
});
});

 

1 reply

vgayraud
QPN Level 7 ●●●●●●●
Forum|alt.badge.img+63
  • QPN Level 7 ●●●●●●●
  • Answer
  • April 16, 2026

Hi,

Here’s ​@Deepak function adapted for NSTE. In addition, limits are specified individually at the top.

Qualtrics.SurveyEngine.addOnload(function () {

var limits = [50, 0, 200]; // one per input, in order. 0 means no limit.
var inputs = document.querySelectorAll("#question-" + this.questionId + " .choice-te-wrapper .text-input");

inputs.forEach(function (input, i) {

var maxChars = limits[i] || 0;
if (maxChars === 0) return;

input.placeholder = maxChars + " character limit.";

var display = document.createElement("div");
display.style.cssText = "visibility:hidden; padding-top:4px;";
display.innerHTML = "Characters remaining: <span class='charCount'>" + maxChars + "</span>";
input.closest(".choice-te-wrapper").insertAdjacentElement("afterend", display);

input.addEventListener("input", function () {
var remaining = maxChars - input.value.length;
if (remaining < 0) {
input.value = input.value.substring(0, maxChars);
remaining = 0;
}
display.style.visibility = input.value.length > 0 ? "visible" : "hidden";
display.querySelector(".charCount").textContent = remaining;
});
});
});