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

监听Text changed事件时Listener未触发且文本无变更是什么原因?

问题根因与修复方案

核心问题:字符串替换逻辑错误,多次修改互相覆盖

你当前的代码存在逻辑错误,三次Replace操作全部基于原始的回调参数newText执行,每一次给customTextField.text赋值都会直接覆盖上一次的修改结果,最终仅最后一次替换"2"的操作会生效,其余替换逻辑全部丢失,因此会出现文本没有按预期修改、看起来回调没有触发的现象。

举个实际执行示例,假设输入的newText为012:

第一步替换0得到₀12写入text
第二步基于原始newText替换1得到0₁2,直接覆盖上一步的₀12
第三步基于原始newText替换2得到01₂,再次覆盖上一步的0₁2
最终输出结果只有数字2被替换,完全不符合预期。

修复方案

修改替换逻辑为链式调用,所有替换操作基于上一次的修改结果执行,最后一次性给text属性赋值即可,你原先的监听移除/添加逻辑本身是正确的,无需调整。

修复后代码如下:

public TMP_InputField customTextField;

public void Start () {
    customTextField.onValueChanged.AddListener(TextChangedEvent);
}

public void TextChangedEvent (string newText) {
    customTextField.onValueChanged.RemoveListener(TextChangedEvent); 

    // 链式替换,所有修改依次生效
    string processedText = newText.Replace("0", "₀")
                                  .Replace("1", "₁")
                                  .Replace("2", "₂");
    customTextField.text = processedText;

    customTextField.onValueChanged.AddListener(TextChangedEvent); 
}

额外排查项

如果调整后回调仍未触发,请检查两个配置项:

  • 确认Inspector面板中已经给customTextField变量赋值了对应的TMP_InputField组件,不存在空引用
  • 确认当前脚本已经挂载到场景中处于激活状态的GameObject上,脚本本身处于启用状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:45:03