首页 > 解决方案 > 在插入符号处插入而不是替换整个文本区域

问题描述

我正在修改第三方应用程序,在该应用程序中,我有以下代码:

            <?php if (!$this->allowEditor) { ?>
            $('#ticket_message').val(data.text);
            <?php } else { ?>
            jInsertEditorText(data.text, 'ticket_message');
            <?php } ?>

在我需要修改的页面上,它正在运行该if语句。它目前所做的是替换 textarea 的内容,#ticket_message但还有一种方法可以将其插入 textarea 而不覆盖现有内容。

如果将它插入到用户停止输入的最后一个位置,那就更好了。

例如 > 文本区域:

Lorem ipsum dolar sit met.

INSERT IT HERE BECAUSE THIS IS THE LAST PLACE THE TEXT CURSOR(caret) WAS SET

Lorem ipsum dolar sit met.

标签: phpreplaceinserttextareacaret

解决方案


您可以附加值

$('#ticket_message').append(new_val); 

要插入插入符号,您可以使用以下功能

function insertAtCaret(areaId,text) {
var txtarea = document.getElementById(areaId);
var scrollPos = txtarea.scrollTop;
var strPos = 0;
var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? 
    "ff" : (document.selection ? "ie" : false ) );
if (br == "ie") { 
    txtarea.focus();
    var range = document.selection.createRange();
    range.moveStart ('character', -txtarea.value.length);
    strPos = range.text.length;
}
else if (br == "ff") strPos = txtarea.selectionStart;

var front = (txtarea.value).substring(0,strPos);  
var back = (txtarea.value).substring(strPos,txtarea.value.length); 
txtarea.value=front+text+back;
strPos = strPos + text.length;
if (br == "ie") { 
    txtarea.focus();
    var range = document.selection.createRange();
    range.moveStart ('character', -txtarea.value.length);
    range.moveStart ('character', strPos);
    range.moveEnd ('character', 0);
    range.select();
}
else if (br == "ff") {
    txtarea.selectionStart = strPos;
    txtarea.selectionEnd = strPos;
    txtarea.focus();
}
txtarea.scrollTop = scrollPos;
}

推荐阅读