Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在输入的末尾移动光标_Javascript_Jquery - Fatal编程技术网

Javascript 在输入的末尾移动光标

Javascript 在输入的末尾移动光标,javascript,jquery,Javascript,Jquery,这是我的小jquery插件,它在键入时用其他符号替换每个英文符号。这里一切都很好,除了当我键入一个比输入本身长的长单词时,光标在输入之外,单词的最后一部分不可见。只要访问下面的链接并键入一些内容(没有空格),你就会明白我的意思 有什么解决方法可以解决这个问题吗?您有两个问题:一个是,如果文本与您要查找的字符匹配,则始终将文本添加到行尾。您应该在插入符号(光标)位置执行插入: jQuery.fn.extend({ insertAtCaret: function(myValue){ retur

这是我的小jquery插件,它在键入时用其他符号替换每个英文符号。这里一切都很好,除了当我键入一个比输入本身长的长单词时,光标在输入之外,单词的最后一部分不可见。只要访问下面的链接并键入一些内容(没有空格),你就会明白我的意思


有什么解决方法可以解决这个问题吗?

您有两个问题:一个是,如果文本与您要查找的字符匹配,则始终将文本添加到行尾。您应该在插入符号(光标)位置执行插入:

jQuery.fn.extend({
insertAtCaret: function(myValue){
  return this.each(function(i) {
    if (document.selection) {
      //For browsers like Internet Explorer
      this.focus();
      sel = document.selection.createRange();
      sel.text = myValue;
      this.focus();
    }
    else if (this.selectionStart || this.selectionStart == '0') {
      //For browsers like Firefox and Webkit based
      var startPos = this.selectionStart;
      var endPos = this.selectionEnd;
      var scrollTop = this.scrollTop;
      this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
      this.focus();
      this.selectionStart = startPos + myValue.length;
      this.selectionEnd = startPos + myValue.length;
      this.scrollTop = scrollTop;
    } else {
      this.value += myValue;
      this.focus();
    }
  })
}
});
然后改变你的路线:

$this.val( $this.val() + String.fromCharCode( i + 4304 ) );

这将解决您的问题,也解决了编辑字符串任何部分的问题

更新: 要使光标位置更新,我们必须将焦点移开,然后返回到元素


我对它做了修改,还有一个捕获光标位置的函数,我想用它来解决你的问题。它只输出到console.log,您可以将其删除。

光标位于末尾。你的意思是保持文本的提示可见。看看你的小提琴,这似乎不能解决问题。是的,你说得对,我已经用工作代码更新了小提琴。你说得对:)无论如何,这是一个很好的答案,谢谢你的帮助!
$this.insertAtCaret(String.fromCharCode( i + 4304 ));
$("#switcher").focus();
$(this).focus();