0

系统中的所有数据都必须保存为大写,除了一些例外(密码、电子邮件、登录名......),所以我创建了一个css来做视觉技巧

input[type="text"], textarea { text-transform:uppercase; }
.small_case { text-transform:smallcase !important; }

对异常字段使用small_case(密码不需要这个)

但是众所周知,这将server-side在用户输入时保留值。

例子:

  • 输入:ABCD
  • 视觉:ABCD
  • 服务器:abcd

所以我对这个问题做了一个jQuery函数"fix"

$(document).ready(function () {
    $("input, textarea").on('keypress blur', function () {
        if ($(this).hasClass('small_case')) {
            $(this).val($(this).val().toLowerCase());
        }
        else {
            $(this).val($(this).val().toUpperCase());
        }
    });
});

PS:为什么我使用keypressAND blur

  1. 右键单击并将值粘贴到输入中
  2. 按回车键保存或进行搜索
  3. 结果:该值将作为用户输入。不是大写

但是,我有一个小问题

在某些输入中,我使用了一个掩码组件,它创建了基本结构

例子:

  • 数值输入:ABC1234
  • 掩码输入:_ _ _ _ _ _ _
  • 而输入:AB_ _ _ _ _;ABC12_ _ ;

使用上面的 jQuery 代码,插入符号将位于末尾

例子:

  • A_ _ _ _ _ _ | (其中|是我的插入符号光标)

我试图做什么,但不确定这如何或是否是正确/最佳的解决方案?

  • 通过正则表达式查找与我上次键入的字符具有相同键码的最后一个字符的索引,并将克拉设置为该位置。
  • 仅使用模糊,将避免该问题,但我属于jQuery 代码下方的PS 。

所以……有什么建议吗?

4

1 回答 1

0

您可能应该执行以下操作:

  1. 使用文本转换来修复用户看到的内容

  2. 当值来自客户端时,利用服务器

如果出于某种原因您仍然想按照您尝试的方式进行操作,那么您必须在修改 jquery 中的文本后修改每个文本框的光标位置。

查看以下帖子中的一些答案: 使用 jQuery,如何在用户仍在编辑该字段时将文本字段的第一个字母大写?

于 2013-08-14T17:49:10.017 回答