当前位置: 首页 > 面试题库 >

JavaScript在html文本框中设置键盘插入符的位置

凤凡
2023-03-14
问题内容

有人知道如何将文本框中的键盘插入符移动到特定位置吗?

例如,如果一个文本框(例如,输入元素,而不是文本区域)中包含50个字符,而我想将插入号放置在字符20之前,我该如何处理?

这与以下问题有所不同:jQuery在TextArea中设置光标位置,这需要jQuery。


问题答案:

摘自Josh Stodola的使用Javascript在Textbox或TextArea中设置键盘插入符号的位置

通用功能,可让您在所需的文本框或文本区域的任何位置插入插入符号:

function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        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();
        }
    }
}

第一个预期参数是您希望插入键盘插入符号的元素的ID。如果找不到该元素,则不会发生任何事情(显然)。第二个参数是插入号位置索引。零将把键盘插入符号放在开头。如果您传递的数字大于elements值中的字符数,它将把键盘插入符号放在最后。

在IE6及更高版本,Firefox 2,Opera8,Netscape9,SeaMonkey和Safari上进行了测试。不幸的是,在Safari上,它无法与onfocus事件结合使用。

使用上述功能强制键盘插入符号在获得焦点时跳至页面上所有文本区域的末尾的示例:

function addLoadEvent(func) {
    if(typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        if(func) {
            var oldLoad = window.onload;

            window.onload = function() {
                if(oldLoad)
                        oldLoad();

                func();
            }
        }
    }
}

// The setCaretPosition function belongs right here!

function setTextAreasOnFocus() {
/***
 * This function will force the keyboard caret to be positioned
 * at the end of all textareas when they receive focus.
 */
    var textAreas = document.getElementsByTagName('textarea');

    for(var i = 0; i < textAreas.length; i++) {
        textAreas[i].onfocus = function() {
            setCaretPosition(this.id, this.value.length);
        }
    }

    textAreas = null;
}

addLoadEvent(setTextAreasOnFocus);


 类似资料:
  • 问题内容: 如何获取输入中文本插入符号的索引? 问题答案: -> 选择开始

  • 所以在过去的一天半时间里,我一直被这个问题所困扰。我试图在我的LWJGL游戏中实现一个2D可写的文本框。文本框的呈现不是问题,并且工作得完美无缺。 然而,我的投入并不是很好。问题是我不知道如何检测单键按下,所以它没有在输入字符串中添加“a”,而是添加了“aaaaaaaaaaaaaaaaaaa”,因为游戏时钟很快。 这是我的代码: 谢了!

  • 问题内容: 我需要更改输入的插入符号位置,在该位置添加给定的数字(示例)。 是否可以执行类似此示例的操作? 我需要例如: 输入:1234。 因此插入符号的位置将为2。 新数字:9 决赛:12934 提前致谢。 问题答案: 我认为这类情况在指令中看起来更好。例如: 用法: 我从这个答案中使用了跨浏览器光标定位的功能。 演示:http : //plnkr.co/edit/5RSgzvyd8YOTaXP

  • 我想用字符串替换元素和“randmsg”。下面是我现在掌握的: 有什么想法吗?我是一个JavaScript傻瓜,我做错了什么?

  • 问题内容: 我以这个简单的HTML为例: 我想要简单的事情- 单击按钮时,我想将插入符号(光标)放入可编辑div中的特定位置。通过网络搜索,我将这个JS附加到了按钮单击上,但是它不起作用(FF,Chrome): 是否可以像这样手动设置插入符号的位置? 问题答案: 在大多数浏览器中,您需要和对象。您可以将每个选择边界指定为一个节点,并在该节点内指定一个偏移量。例如,要将插入符号设置为文本第二行的第五

  • 问题内容: 我有一个具有contenteditable设置的div,并且在按下回车键时使用jquery捕获了按键,以调用preventDefault()。类似于 这个在光标处插入文本的问题,我想直接插入html,为简便起见,我们将其称为br标签。使用上面问题的答案实际上在IE中有效,因为它使用range.pasteHTML方法,但是在其他浏览器中,br标签将显示为纯文本而不是html。如何修改答案