【问题标题】:Reformatting input-fields重新格式化输入字段
【发布时间】:2010-10-19 08:16:34
【问题描述】:

我想在提交时重新格式化 HTML 表单域的内容。

例如:用户输入“1.234,56”(这是该区域设置中数字的有效格式),但我想将值“1234.56”提交给服务器。

我想听听其他人对此的体验。你是怎么做到的?

我的第一个想法是一个 onSubmit 事件,它重新格式化内容。但是有没有人有这方面的实现经验?

或者是更好的主意?


Javascript 始终可用。如果使用 Dojo 更容易,我可以使用它。

顺便说一句:它实际上有点复杂,因为我也想重新格式化“模糊”。所以用户输入“1234,56”(输入格式)。当焦点改变时,它应该重新格式化为“1.234,56”(显示格式)。但是发送到服务器的实际值应该是“1234.56”(机器格式)。
输入格式和显示格式之间的转换应该很容易,但也许所有这些都可以通过一些巧妙的方式组合起来。


编辑:这不适用于公共网站,因此关于依赖 Javascript 和类似内容的意见不相关。

【问题讨论】:

    标签: javascript html forms


    【解决方案1】:

    嗯,想到的一个想法可能是专门使用 Javascript,并将实际输入的值存储到隐藏字段中。然后捕获文本框的 onBlur Javascript 事件以调用根据您的要求格式化值的函数。

    最后,在提交表单时,访问隐藏字段中的值,而不是文本框。

    【讨论】:

    • 我也想过这个。但这会使输入数据的大小增加一倍。这个也可以处理,但是好像不太实用。
    【解决方案2】:

    鉴于信息,我可能会执行以下操作:

    模糊处理程序应该

    1. 获取输入
    2. 验证输入 - 它是一个数字吗?是否在范围内?等
    3. 转换为标准化格式以供显示 (1.234,56)
    4. 将表单的 [input] 的值设置为规范化表单

    提交处理程序应该

    1. 获取输入
    2. 验证输入 - 同上
    3. 从特定于区域设置的值转换为服务器上所需的值。
    4. 将表单的 [input] 的值设置为转换后的值。
    5. 提交表单。

    请记住,无论您进行多少客户端验证,您仍然需要进行服务器端验证。但我会尽可能多地在 Javascript 中进行验证,因为我更愿意让用户知道他的表单值将失败,而不必先向服务器这样做。

    此外,我可能会更改服务器端操作,以便能够处理许多语言环境中的金额。这会给我在 Javascript 中的提交处理程序上更多的回旋余地。

    【讨论】:

      【解决方案3】:

      按照您提出问题的方式,您基本上想在客户端进行验证,这在任何情况下都应该是不可行的。只需提交号码并使用特定于区域设置的处理在服务器端验证它。如果您想立即获得反馈,请使用 AJAX,但在服务器端进行验证 - 您可以使用 AJAX 请求执行 onBlur()。

      【讨论】:

      • 我不同意客户端验证是一件坏事。缺少服务器端验证是一件坏事,但这是另一回事。 (而且 AJAX 仍然与服务器联系,真是浪费。)在这种情况下,在客户端格式化它是非常实用的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多