ASP.Net MVC中基于JQuery实现特定TD下文本框数字格式化的问题求助
解决ASP.NET MVC中jQuery数字格式化不生效的问题
看起来你的核心问题是输入框失去焦点后数字格式化未生效,还需要覆盖表单保存时的格式化场景。咱们一步步来排查和解决:
问题根源分析
- 你之前的代码直接传入
this.value给$.myFormat.format(),但this.value是字符串类型,而你的格式化方法可能需要数值类型的参数(比如示例里$.myFormat.format(232038232233)传入的是数字)。如果用户输入的是纯数字字符串、带逗号的旧值,格式化方法可能无法正确解析。 - 你提到控制台查看
this显示旧值——其实this指向的是input元素本身,你需要打印this.value才能看到当前输入的内容,之前的判断可能有误。 - 原input元素带有
dataorigvalue属性,格式化后没有同步更新,可能导致数据不一致。
解决方案
我们先写一个通用的格式化工具函数,再分别绑定focusout和表单submit事件,确保两种场景都能生效:
1. 通用格式化函数
这个函数负责清理输入值、转换类型、应用格式化,并同步更新相关属性:
function formatNumericInput(inputElement) { // 第一步:清理输入值,移除所有非数字和小数点的字符 const rawInput = $(inputElement).val().replace(/[^0-9.]/g, ''); // 处理多个小数点的情况(只保留第一个) const cleanedInput = rawInput.replace(/(\..*)\./g, '$1'); // 第二步:转换为数值,空值则设为0 const numericValue = cleanedInput ? Number(cleanedInput) : 0; // 第三步:应用你的格式化方法 const formattedValue = $.myFormat.format(numericValue); // 第四步:更新输入框值和dataorigvalue属性 $(inputElement).val(formattedValue); $(inputElement).attr('dataorigvalue', formattedValue); }
2. 绑定事件
在document.ready里绑定失去焦点和表单提交事件:
$(document).ready(function () { // 绑定focusout事件:失去焦点时格式化 $('tr td[id*=myId] input[type=text].numeric').on('focusout', function () { formatNumericInput(this); }); // 绑定表单submit事件:保存前统一格式化所有目标输入框 $('form').on('submit', function () { $('tr td[id*=myId] input[type=text].numeric').each(function () { formatNumericInput(this); }); // 返回true允许表单提交,如需验证可在这里添加逻辑 return true; }); });
额外说明
- 我在选择器里加上了
.numeric类,这样可以更精准地定位需要格式化的输入框(你的示例input带有这个类),避免误处理其他文本框。 - 如果你的
$.myFormat.format()方法本身支持字符串转数值,那清理步骤可以简化,但保留清理逻辑能避免用户输入非数字字符导致的异常。 - 测试时可以在
formatNumericInput里加console.log(numericValue),确认传给格式化方法的是正确的数值类型。
内容的提问来源于stack exchange,提问作者The Inquisitive Coder
相关产品推荐
相关产品推荐

