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

求助:jQuery实现值变更后失焦恢复原始文本的代码问题

问题修复:输入框失焦时恢复原始值

我看了你的代码,发现几个导致它无法正常运行的问题,同时调整了逻辑更贴合你的需求(失焦时检查值是否变更,变更则恢复原始值):

原代码的问题点

  • 获取元素值时,(this).value 写法不规范:要么用jQuery的$(this).val(),要么直接用DOM元素的this.value
  • 使用change事件不合适:change事件仅在值改变且元素失焦时触发,但我们需要每次失焦都检查值是否变更,而不是只在值改变时处理
  • 设置值用attr('value', ...)错误:表单元素的当前值应该用val()方法设置,attr('value')只是修改元素的属性,不会同步到输入框的当前显示值

修复后的代码

$(document).ready(function(){
    // 存储原始值的变量
    let originalValue;

    // 当输入框获取焦点时,保存当前值作为原始值
    $("#cfs_i9_cf9").focusin(function(){
        originalValue = $(this).val();
        // 提前处理数字精度,避免后续对比出现小数误差
        originalValue = Math.round(parseFloat(originalValue) * 100) / 100;
    });

    // 当输入框失焦时,检查值是否变更并处理
    $("#cfs_i9_cf9").blur(function(){
        const currentValue = Math.round(parseFloat($(this).val()) * 100) / 100;
        // 如果当前值和原始值不一致,恢复原始值
        if (currentValue !== originalValue) {
            $(this).val(originalValue);
        }
    });
});

代码逻辑说明

  1. focusin事件:输入框获得焦点时,立即保存当时的数值(并处理了两位小数的精度),确保后续对比的是用户编辑前的原始值
  2. blur事件(失焦):每次输入框失去焦点时,获取当前值并同样处理精度,和原始值对比:
    • 如果值不一样,就把输入框的值恢复到原始值
    • 如果值没变化,就不做任何操作

这样就能完美实现你想要的「检测元素值是否变更,若变更则在失焦时恢复为原始值」的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:24:11