【问题标题】:Javascript: input box - autocapitalize first letter but can overrideJavascript:输入框 - 首字母自动大写,但可以覆盖
【发布时间】:2012-07-24 17:43:27
【问题描述】:

我有一个姓名输入框。我想在用户键入时自动将名称的第一个字母大写,但允许用户覆盖对“de Salis”等名称的更改。

我看到here 认为这在 CSS 中是不可能的,因为text-transform:capitalize; 会将每个单词都大写并且不能被覆盖。

.keyup 处理程序可以在您键入时修复第一个字母,并且找到了很多解决方案 here 可以做到这一点。

我看不到如何轻松覆盖原始大写。我想我需要一个标志,但如果该函数是一个可以附加到多个元素的函数,那么标志应该放在哪里?我可以附加一个 DOM 元素作为标志,但这看起来很丑。

here找到了一个非覆盖模型的小提琴。

建议?

【问题讨论】:

  • 也许可以试试 .one() api.jquery.com/one
  • 是的,漂亮的@jSweazy。我创建了一个更新的小提琴:jsfiddle.net/szhxd/1 把它写成答案,我会打勾:)
  • 继续接受@arttronics 的回答
  • 谢谢。我在等着看你是否回复:)

标签: javascript jquery input capitalize


【解决方案1】:

要让输入框只显示第一个大写字母,您可以直接使用keyCode,因为它总是大写 格式。

仅此一项就可以减轻您使用昂贵的 regex.replace() 方法的需求。

jQuery:

$('.auto').one('keyup', function(e) {
    $(this).val(String.fromCharCode(e.keyCode));
});

参考:jsFiddle


以下答案已修改为包括Tab Key 要求,单击输入框内部并通过上下文菜单粘贴,使用键盘粘贴方法(Ctrl + V),然后直接输入。它取消了 keyCodes 字符,因此国际支持得到了承认。 jQuery选择器获得here

重新修订: jsFiddle提交时不强制使用大写字母。

【讨论】:

  • 有点麻烦。如果您将tab 输入到输入框中,它会触发该功能并将光标穿过。另一种方法也会在您进入时触发,但只有在 keyCode 方法中才会变得明显,因为另一种方法不会移动光标。我将不得不解决这个问题:)
  • 查看 状态更新 了解新的 jsFiddle。干杯!
  • 我的法语 AZERTY 键盘怎么样?当我输入 é 时,我得到一个 2 ! ;)
  • @Cyrille,我相信我最新的 jsFiddle 现在应该可以使用国际键盘了。干杯!
  • 这里有更多关于jQuery .keypress();input 的信息,请查看我在哪里获得整个选择器的答案中的参考。干杯!
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 2021-07-29
  • 2011-05-14
  • 1970-01-01
  • 2021-05-05
  • 2013-06-07
  • 2018-06-07
  • 1970-01-01
相关资源
最近更新 更多