js手动控制输入框的光标位置

功能:点击外部可选项将文字带入,并且光标在上一次位置后(类似于手机键盘点击)

两种场景:

  1. 焦点没有进入文本框或者在文本框中最后,点击外部之后直接将内容加到后面然后跟上光标;

    注:光标位置可能和焦点位置不一致,光标最多只能靠近右边框,

  2.焦点在文本框且光标在已有文本的中间,例123,在1后,加入4后显示1423并且光标在4后;

在此展示我用的项目代码(angular的动态表单中)

  getConputation(item) {
    const formModel = this.formModel.value[‘rule_result4‘]; // 控制器中有文本框现在的内容
    const value = ‘{‘ + item[‘name‘] + ‘}‘; // 要添加的内容
    const element = $(‘#calculate input‘)[0]; // 输入框对象
    const newValLeft = formModel.substring(0, element.selectionStart); // 拼接,新值的左边
    const newValRight = formModel.substring(element.selectionStart, formModel.length);  // 拼接,新值的右边
    const newValue = newValLeft + value + newValRight; // 将新值左边、插入值、右边拼接在一起
    const newLocation = element.selectionStart + value.length; // 光标新的位置(以前的位置加上插入值的长度)
    this.formModel.patchValue({ ‘rule_result4‘: newValue }); // 给该文本框赋新值
    this.addRange(newLocation, newValue, element);  // 控制光标位置
  }
  // 控制光标位置
  addRange(newLocation, newValue, element) {
    element.value = newValue; // 更新输入框的值
    element.focus(); // 输入框获取焦点,但当文本过长的时候文本最后和光标不一同显示在输入框右边,而是隐藏起来了
    element.selectionStart = element.selectionEnd  = newLocation; // 更新光标位置,将之前算的新位置给输入框光标 }

讲解:Selection对象表示用户选择的文本范围或插入符号的当前位置。要获取用于检查或修改的Selection对象,请使用window.getSelection()

selectionSatrt记录上一次的开始位置,selectionEnd记录结束位置

文本框的值改变后要再新值的基础上来控制光标位置

原文地址:https://www.cnblogs.com/skylen/p/9337612.html

时间: 2024-10-12 11:59:14

js手动控制输入框的光标位置的相关文章

关于文本输入框获取光标位置以及指定位置插入内容

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> </head> <body> &l

js设置输入框失去光标与光标选中时样式

输入框样式 <script language="javascript" type="text/javascript"> function glb_searchTextOnfocus(obj) { if (obj.value == '请输入您想要的作品...') obj.value = ''; obj.style.color = '#333'; } function glb_searchTextOnBlur(obj) { if (obj.value ==

输入框中获取当前光标位置&amp;设置光标位置

弹出窗中的输入项获取焦点时,如果输入框中有内容,将光标定位到文字结尾. 开发的时候没有注意,直接focus了一下,结果被测试追杀了好久... 获取输入框中光标位置: function getCursorPos(ctrl){ var pos = 0; if(document.selection){ //IE var range = document.selection.createRange(); range.moveStart('character',-ctrl.value.length); p

C#中使用SelectionStart属性指定输入框光标位置

今天工作中遇到一个小BUG需要修改,需求为在文本框输入的过程中,如果数字是以0开头则自动消除0 如输入012,则显示12 很容易想到在textbox的text changed事件中判断,如果text是startwith 0,那么TrimStart('0') 但实际调试时发现,0是是去掉了,但光标会保留在最前面,那么用户依次输入012三个数字,界面会显示为21 查看资料后发现c#中控件属性SelectionStart可以指定光标位置,那么只需要在处理TrimStart('0')后加一句 textB

js获得光标位置和键的ASCLL

input输入框中,不允许输入某些特殊字符,当输入特殊字符时替换成空. 问题:绑定keyup事件,为了用户输入方便,当用户点击方向键时进行修改,也会触发keyup事件,这时光标会跳到最后一位.... 解决方案一:可以用keycode键的ASCll排除掉,但是点击键盘的其他键光标还是会跳到最后一位. 解决方案二:先获得光标的位置信息,然后进行数据处理操作,最后定位到原来光标的位置. 代码如下: //绑定keyup事件,调用replaceStr()函数 function replaceStr(){

获取textarea文本框所选字符光标位置索引,以及选中的文本值;textarea高度自适应,随着内容增加高度增加;获取输入框中的光标位置

获取textarea文本框所选字符光标位置索引,以及选中的文本值 $.fn.selection = function () { var s, e, range, stored_range; if (this[0].selectionStart == undefined) { var selection = document.selection; if (this[0].tagName.toLowerCase() != "textarea") { var val = this.val()

js之向div contenteditable光标位置添加字符

原理: 在HTML里面,光标是一个对象,光标对象是只有当你选中某个元素的时候才会出现的. 当我们去点击一个输入框的时候,实际上它会产生一个选中对象-selection(就是我们可以看到的文字变成蓝色的那个区域),selection在火狐浏览器可以直接用 window.getSelection()获取,在HTML里面,selection只有一个的,并且selection是一个区域,你可以想象成一个长方形,它是有开始和结束的 当你点击一个输入框,或者你切换到别的输入框,selection是会跟着变化

获取光标位置

原文:https://blog.csdn.net/mafan121/article/details/78519348 html <iframe id="editor" width="600px" height="400px" style="border:solid 1px;"></iframe> <input type="txt" onclick="alert(get

设置输入框的光标置于文字末尾

我们在项目开发过程中,会遇到这么一个问题:页面有个搜索框,点击搜索按钮或者回车键搜索后,文本框的光标置于文字前方,不便于继续输入, 影响操作,我们需要将光标置于文本之后,这时我就需要下面这段代码来控制光标. 为了方便使用已封闭成函数 1 function setCursorPos( input ) 2 { 3 var isIE = ( navigator.appName == "Microsoft Internet Explorer" );//判读是否为ie浏览器 4 var coun