如何通过javascript在文本区域中插入/删除字符
如何通过javascript在文本区域中添加/删除字符。假设我通过屏幕上的小键盘进行输入。我需要模拟尽可能多的关键点,如backspace、del、enter。更具挑战性的任务是为textarea维护一个伪光标,并在从键盘接收输入时移动光标 因此,如果我按下左箭头,我有一个伪光标的轨迹,那么我需要将光标向后移动一个位置,然后从该位置插入/删除字符如何通过javascript在文本区域中插入/删除字符,javascript,jquery,textarea,Javascript,Jquery,Textarea,如何通过javascript在文本区域中添加/删除字符。假设我通过屏幕上的小键盘进行输入。我需要模拟尽可能多的关键点,如backspace、del、enter。更具挑战性的任务是为textarea维护一个伪光标,并在从键盘接收输入时移动光标 因此,如果我按下左箭头,我有一个伪光标的轨迹,那么我需要将光标向后移动一个位置,然后从该位置插入/删除字符 我希望我已经讲清楚了。非常感谢您的帮助。这里有一个读取和设置光标位置的函数: function doGetCaretPosition (ctrl) {
我希望我已经讲清楚了。非常感谢您的帮助。这里有一个读取和设置光标位置的函数:
function doGetCaretPosition (ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function setCaretPosition(ctrl, pos){
if(ctrl.setSelectionRange)
{
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
要捕获击键,可以使用jQuery,以下是一个答案:
我在这里看不到任何代码。。。这个问题有点模糊。到目前为止,您尝试了什么?我知道我的问题有点模糊,但我不是在这里寻找确切的代码。我只是在寻找一些关于如何实现它的指针。到目前为止,我已经尝试过这个,我正在尝试做的是模拟一个文本框的光标,它由javascript的输入控制,比如说通过Ajax,你可以用你需要的字符触发按键,插入符号将移动到它应该移动的地方。查看jQuery.events!要通过javascript操作文本区域的内容,可以使用纯JS方法
selectionStart
和selectionEnd
获取文本区域内的插入符号位置,以及substr
/子字符串
/替换
/relative值
(或JQuery的.val()
)方法来操作内容。然而,我不知道如何用屏幕键盘、模拟光标和Ajax AltoCues来实现它。屏幕上的键盘只是一个参考,考虑我通过Ajax得到一系列的击键,它将包括键击,例如“代码>输入< /代码>,<代码>箭头键< /代码>,我想在文本区域中<代码>执行< /代码>。但同时我不想干扰当前文档中插入符号的位置,我只需要插入/删除位置中的文本,而不管插入符号在哪里(保持不变),谢谢我会检查出来,但我不想设置实际光标的位置,相反,我想通过记录它的位置来创建一个伪光标,每当一个新字符出现时,将其插入正确的位置我遇到了另一个捕捉按键斯托克斯的问题,keydown
会记录箭头键等特殊键,但是keydown
在按下按键时会生成单个事件,但是我想生成一个单独的事件来正确地在正确的位置插入字符您可以使用$(document).keydown(函数(e){if(e.keyCode==33){linenumber++;return false;}…}为了避免设置真正的光标,您可以将焦点设置为页面上的其他元素。感谢您的回答,但正如我对下面的回答所作的评论,我不打算更改实际光标的位置,而是创建一个伪光标。但我想我现在有一些工作要做,我也在开发一个类似的应用程序,并使按键处理与在不同的浏览器中工作是件痛苦的事。你可以试试谷歌网络工具包。它被用来创建typeracer.com。
$('#textArea').keypress(function(event) {
//console.log("Key down:" + event.keyCode);
event.preventDefault();
processKey(event);
});
function setCaretPosition(pos){
var target = document.getElementById("target");
if(target.setSelectionRange) {
target.focus();
target.setSelectionRange(pos,pos);
}
else if (target.createTextRange) {
var range = target.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}