【问题标题】:How Keyboard's caps lock key on for the first letter for text box?键盘的大写锁定键如何为文本框的第一个字母打开?
【发布时间】:2015-05-01 07:50:25
【问题描述】:

我正在开发一个cordova 应用程序。对于输入文本,我想为第一个字母启用键盘的大写锁定键。以前我使用 text-form:capitalise 但如果用户想要首字母小写,则用户不能再次将首字母更改为小写(大写属性不会在键盘上启用大写锁定键)。

我只想在输入第一个字母时打开大写锁定键,如果用户禁用它,那么他可以将第一个字母输入为小写。

任何 css、html、jquery、javascript 解决方案的家伙?我的应用中有许多文本字段,我希望该解决方案适用于所有输入 type="text"。

我在下面输入的示例文本字段:

<input id="candidate_first_name" placeholder="Candidate First Name*" 
                                            type="text" class="ui-input-shadow-text">

【问题讨论】:

  • 我认为您的意思是Shift 键。移动应用程序有时具有输入字段,当字段刚刚变为为空或为空时获得焦点时启用 Shift 键。这在名称字段中最常见。这是你的意思吗?
  • 那不是好的 UI 设计。最终,您必须允许用户输入他们想要的内容,尤其是在所有小写都可以接受的情况下。如果它很重要,那么我会鼓励使用占位符消息的初始大写。

标签: javascript jquery html css cordova


【解决方案1】:

您不能直接打开 capslock 或 shift 键。

您可以捕获按键事件,然后,如果该字段有一个字符,则将其设为大写。那么问题是避免弄乱用户的光标位置。在大多数现代浏览器上,您可以通过在更新字段后设置插入符号位置来做到这一点。如果用户不希望它被封顶,他们将不得不返回并进行编辑,这并不理想。

我不会在一般网页中执行此操作(如果有的话),有太多浏览器无法测试以避免让用户不满意的问题,但是如果您的场景更有限并且可以使用您的设备进行充分测试目标浏览器,可能是可行的。

这是一个适用于当前 Chrome、Firefox、IE 和 iOS Safari 的示例:

$("#testing").on("keypress", function(e) {
  // Only do it if the field is blank before the keypress
  // (the event occurs before the character is added to
  // the field)
  if (this.value.length === 0) {
    setTimeout(maybeCap.bind(this), 0);
  }
});

function maybeCap() {
  // Only do it if the field now has a single character
  if (this.value.length == 1) {
    this.value = this.value.toUpperCase();
    setCaretPosition(this, 1);
  }
}

function setCaretPosition(elem, caretPos) {
  if (elem) {
    if (elem.createTextRange) {
      var range = elem.createTextRange();
      range.move('character', caretPos);
      range.select();
    } else {
      if (elem.selectionStart) {
        elem.focus();
        elem.setSelectionRange(caretPos, caretPos);
      } else
        elem.focus();
    }
  }
}
<input type="text" id="testing">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

或者作为一个 jQuery 插件:

$.fn.capFirst = function() {
  this.on("keypress", keypressHandler);
  
  function keypressHandler(e) {
    // Only do it if the field is blank before the keypress
    // (the event occurs before the character is added to
    // the field)
    if (this.value.length === 0) {
      setTimeout(maybeCap.bind(this), 0);
    }
  }
  
  function maybeCap() {
    // Only do it if the field now has a single character
    if (this.value.length == 1) {
      this.value = this.value.toUpperCase();
      setCaretPosition(this, 1);
    }
  }

  function setCaretPosition(elem, caretPos) {
    if (elem) {
      if (elem.createTextRange) {
        var range = elem.createTextRange();
        range.move('character', caretPos);
        range.select();
      } else {
        if (elem.selectionStart) {
          elem.focus();
          elem.setSelectionRange(caretPos, caretPos);
        } else
          elem.focus();
      }
    }
  }
};

$("input[type=text]").capFirst();
<div><input type="text"></div>
<div><input type="text"></div>
<div><input type="text"></div>
<div><input type="text"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

【讨论】:

  • 感谢您的回答。首字母大写已经与 css 属性'text-form:capitalise'一起使用,但问题是它强制将首字母设为大写锁定,但我用户想让首字母变小什么我愿意吗?
  • 谢谢你们,我实际上正在寻找解决方案,当用户单击输入文本时,大写锁定键打开,在第一个字符之后它应该关闭。
  • @LejinK.R:正如我上面所说,他们可以做到这一点,但他们必须回去改变它。例如,如果我想在上面的框中输入foo,我会输入foo,它会更改为Foo,然后返回并用f 替换F。不理想,但您无法通过键盘的 capslock 或 shift 键来实现。
  • 正在使用适用于 android 和 ios 的 cordova 移动应用程序。
  • 在你的代码中我认为当长度为 1 时大写对吗?
猜你喜欢
  • 2011-02-20
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多