更新输入值而不会丢失光标位置

80 javascript jquery

可能重复:
在javascript replace中停止光标从跳转到输入字段的结尾

我想使用JavaScript强制文本框的值为小写.我已经尝试了下面的代码,但每次按一下键时光标都会跳到输入的末尾.我怎么能避免这个?

$("#beLowerCase").keyup(function(){
    $(this).val( $(this).val().toLowerCase() );
});
Run Code Online (Sandbox Code Playgroud)

nic*_*ass 124

$("#beLowerCase").on('input', function(){

    // store current positions in variables
    var start = this.selectionStart,
        end = this.selectionEnd;

    this.value = this.value.toLowerCase();

    // restore from variables...
    this.setSelectionRange(start, end);
});
Run Code Online (Sandbox Code Playgroud)

(小提琴)


这实际上也适用于CSS:

#beLowerCase{
  text-transform:lowercase;
}
Run Code Online (Sandbox Code Playgroud)

服务器可以照顾实际的下壳...

  • 我讨厌jQuery是有原因的,因为每个人都根本不需要使用jQuery. (4认同)
  • 在使用此技术去除字符时,不要忘记考虑已更改的光标位置。如果在设置 selectionRange 之前值的长度发生变化,则应从选择的开始和结束减去长度差异。 (2认同)