You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qualtrics单选题文本框显隐异常:前缀后缀提前显示求助

问题描述

我是编程和Qualtrics新手,正在赶时间自学HTML基础。我有一个带三个选项的单选题,每个选项对应一个文本框,要求只有选中选项时文本框才显示(显隐功能)。需要给文本框添加不同的前缀后缀,比如“$”“annually”等,但现在出现未选选项时前缀后缀已显示,文本框却要选中才出现的问题。移动端适配已经解决,只剩这个显隐问题没搞定,附上当前代码,求技术帮助。

问题现象

  • 未选择任何选项:所有文本框的前缀后缀(如$、hourly、annually、%)都已显示,但对应的文本框处于隐藏状态
  • 选中选项后:对应选项的文本框显示,前缀后缀与文本框正常搭配显示
  • 选中另一选项:原选中选项的文本框隐藏,新选中选项的文本框显示,前缀后缀跟随切换

当前代码

JavaScript 代码

Qualtrics.SurveyEngine.addOnload(function()
{   
    
var textInputs = jQuery("#"+this.questionId+" .InputText").css("float","none");
    textInputs.eq(0).before("$ ").after(" hourly");
    textInputs.eq(1).before("$ ").after(" annually");
    textInputs.eq(2).after(" %");
    
var QID= this.questionId;
     jQuery("#"+this.questionId+" input[type='text']").attr('type', 'tel');
    jQuery("#" + QID + " .InputText ").hide();
      jQuery("#" + QID + " input[type='radio']").each(function(){

            if(jQuery(this).prop("checked") == true)
            {   
                var v1 = jQuery(this).attr("id");
                jQuery("[id*='"+v1+"~TEXT']").show();
                }
           else
           {
            var v1 = jQuery(this).attr("id");
            jQuery("[id*='"+v1+"~TEXT']").val('');
            jQuery("[id*='"+v1+"~TEXT']").hide();
         }     
     });

  jQuery("#" + QID + " .Selection ").on("click change",function(){
       jQuery("#" + QID + " input[type='radio']").each(function(){
            if(jQuery(this).prop("checked") == true)
            {
                    var v1 = jQuery(this).attr("id");
                jQuery("[id*='"+v1+"~TEXT']").show();
                }
           else
           {
            var v1 = jQuery(this).attr("id");
            jQuery("[id*='"+v1+"~TEXT']").val('');
            jQuery("[id*='"+v1+"~TEXT']").hide();
         }     
     });
});
});

  jQuery("#" + QID + " .Selection ").on("click change",function(){
       jQuery("#" + QID + " input[type='radio']").each(function(){
            if(jQuery(this).prop("checked") == true)
            {
                    var v1 = jQuery(this).attr("id");
                jQuery("[id*='"+v1+"~TEXT']").show();
                }
           else
           {
            var v1 = jQuery(this).attr("id");
            jQuery("[id*='"+v1+"~TEXT']").val('');
            jQuery("[id*='"+v1+"~TEXT']").hide();
         }     
     });
});

Qualtrics.SurveyEngine.addOnReady(function()
{
    /*Place your JavaScript here to run when the page is fully displayed*/
});

Qualtrics.SurveyEngine.addOnUnload(function()
{
    /*Place your JavaScript here to run when the page is unloaded*/
});

CSS 代码

@media (max-width: 480px){ #QID23 .InputText { width: 20% !important; } }
解决方案

问题根源在于你直接把前缀后缀插入DOM,只隐藏了文本框本身,但前缀后缀作为独立元素仍会显示。要解决这个问题,需要把文本框和对应的前缀后缀放在同一个容器里,统一控制显隐。

修改后的JavaScript代码如下,核心改动:

  1. 给每个文本框及其前后缀包裹容器,同步控制显隐
  2. 移除原代码中重复绑定事件的冗余代码
  3. 初始化时默认隐藏所有包含文本框和前后缀的容器
Qualtrics.SurveyEngine.addOnload(function()
{   
    var QID = this.questionId;
    var textInputs = jQuery("#"+QID+" .InputText").css("float","none");

    // 为每个文本框包裹容器,并将前缀后缀添加到容器内
    textInputs.each(function(index) {
        var $container = jQuery("<span class='text-input-container'></span>");
        jQuery(this).wrap($container);
        var $parent = jQuery(this).parent();
        
        switch(index) {
            case 0:
                $parent.prepend("$ ").append(" hourly");
                break;
            case 1:
                $parent.prepend("$ ").append(" annually");
                break;
            case 2:
                $parent.append(" %");
                break;
        }
    });

    // 将文本框类型改为tel
    jQuery("#"+QID+" input[type='text']").attr('type', 'tel');

    // 初始化:隐藏所有文本框容器,仅显示选中选项对应的容器
    jQuery("#" + QID + " input[type='radio']").each(function(){
        var $textContainer = jQuery("[id*='"+jQuery(this).attr("id")+"~TEXT']").parent();
        if(jQuery(this).prop("checked")) {
            $textContainer.show();
        } else {
            jQuery("[id*='"+jQuery(this).attr("id")+"~TEXT']").val('');
            $textContainer.hide();
        }     
    });

    // 绑定单选框切换事件,同步控制容器显隐
    jQuery("#" + QID + " .Selection ").on("click change",function(){
        jQuery("#" + QID + " input[type='radio']").each(function(){
            var $textContainer = jQuery("[id*='"+jQuery(this).attr("id")+"~TEXT']").parent();
            if(jQuery(this).prop("checked")) {
                $textContainer.show();
            } else {
                jQuery("[id*='"+jQuery(this).attr("id")+"~TEXT']").val('');
                $textContainer.hide();
            }     
        });
    });
});

Qualtrics.SurveyEngine.addOnReady(function()
{
    /*页面完全显示时执行的代码*/
});

Qualtrics.SurveyEngine.addOnUnload(function()
{
    /*页面卸载时执行的代码*/
});

代码说明

  • 用<span class='text-input-container'></span>包裹每个文本框和对应的前缀后缀,通过控制容器的显隐实现文本框与前后缀的同步显示/隐藏
  • 初始化时遍历所有单选框,对应隐藏/显示容器
  • 移除了原代码中重复绑定事件的冗余逻辑
  • 保留原移动端CSS适配代码不变

内容的提问来源于stack exchange,提问作者jacoblw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:20:28