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

如何为多个带currency类的输入框返回格式化后的印尼盾值?

解决多输入框的印尼盾格式化回显问题

问题描述

我设置了多个带有currency类的输入框:

<input class="form-textbox number-only currency" type="text" id="nilai1" required/>
<input class="form-textbox number-only currency" type="text" id="nilai2" required/>

已经实现了印尼盾格式化函数:

function formatRupiah(nominal){
    return new Intl.NumberFormat('id-ID',
        { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }
    ).format(nominal);
}

目前能通过按键事件在控制台输出格式化后的值,但无法将值写回当前正在输入的输入框,不知道怎么针对多个currency类输入框处理。

解决方案

1. 修正选择器并绑定正确事件

把选择器从.rupiah改成.currency以匹配你的输入框类,然后在事件回调里通过$(this)直接操作当前触发事件的输入框,将格式化后的值赋值给它。

2. 处理输入值的清理

格式化后的内容包含Rp.和千分位逗号,用户后续输入时,输入框的值会带有非数字字符,需要先提取纯数字再格式化,避免格式错误。

完整代码示例

// 格式化印尼盾函数(新增值清理逻辑)
function formatRupiah(nominal){
    // 过滤掉所有非数字字符,确保格式化的是纯数字
    const cleanNumber = nominal.replace(/[^0-9]/g, '');
    // 空值时返回空字符串,避免格式化出无效内容
    return cleanNumber ? new Intl.NumberFormat('id-ID',
        { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }
    ).format(cleanNumber) : '';
}

// 给所有currency类输入框绑定keyup事件
$('.currency').keyup(function(){
    // 获取当前输入框的原始值
    const rawValue = this.value;
    // 将格式化后的值直接赋值给当前输入框
    $(this).val(formatRupiah(rawValue));
});

优化光标位置(可选)

上面的代码会让光标每次跳到输入框末尾,影响输入体验,可添加光标位置恢复逻辑:

$('.currency').keyup(function(){
    const inputElement = this;
    const rawValue = inputElement.value;
    // 记录光标当前位置
    const cursorPos = inputElement.selectionStart;
    const formattedValue = formatRupiah(rawValue);
    
    // 计算格式化前后的长度差,用于调整光标位置
    const lengthOffset = formattedValue.length - rawValue.length;
    
    $(this).val(formattedValue);
    // 恢复光标到输入前的相对位置
    inputElement.setSelectionRange(cursorPos + lengthOffset, cursorPos + lengthOffset);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:15:18