Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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_Textarea_Autoresize_Cursor Position - Fatal编程技术网

Javascript 在自动调整大小的文本区域中键入内容时,始终将焦点放在元素的顶部

Javascript 在自动调整大小的文本区域中键入内容时,始终将焦点放在元素的顶部,javascript,jquery,textarea,autoresize,cursor-position,Javascript,Jquery,Textarea,Autoresize,Cursor Position,我有一个扩展的文本区域。当文本区域已经扩展到窗口底部时,正文会闪烁/滚动回文本区域的顶部,除非滚动窗口,否则您无法看到最后键入的字符 样本可在本文件中找到。我试着在身体上加一个卷轴 window.scrollTo(0, document.getElementsByTagName('textarea')[0].getBoundingClientRect().bottom); 如何计算textarea中光标与窗口的偏移量?我想得到光标的顶部偏移量,如果光标已经超出折叠范围,只需将窗口滚动到它的位置

我有一个扩展的文本区域。当文本区域已经扩展到窗口底部时,正文会闪烁/滚动回文本区域的顶部,除非滚动窗口,否则您无法看到最后键入的字符

样本可在本文件中找到。我试着在身体上加一个卷轴

window.scrollTo(0, document.getElementsByTagName('textarea')[0].getBoundingClientRect().bottom);
如何计算textarea中光标与窗口的偏移量?我想得到光标的顶部偏移量,如果光标已经超出折叠范围,只需将窗口滚动到它的位置


在此方面的帮助将不胜感激:)

对于所有鼠标位置问题,我都使用以下方法,而且从未遇到过问题。我不明白为什么它在这个例子中也不起作用

var cX;
var cY;
document.onmousemove = function(e){
    cX = e.pageX;
    cY = e.pageY;
}
你可以像我一样使用它:

window.scrollTo(0, cX);

或者简单地将e.pageX放入您的代码示例中。cX,cY是光标坐标。

您的代码很棒-我刚刚添加了几毫秒的超时时间(大约100-200就足够了),现在它运行良好。我只是想知道“聚焦”事件处理程序的作用是什么。我猜您可以跳过在resize()函数中调用focus()。

我在堆栈中找到了一个解决方案

我还添加了resize函数中的代码片段

function resize(e){
var text = _this.value,
    lines = text.split('\n'),
    cursorPosition = $this.getCursorPosition(),
    scrollLeft = window.pageXOffset || (document.documentElement || document.body.parentNode || document.body).scrollLeft,
    scrollTop  = window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop;

    for(var i = 0, length = lines.length; i < length; i++){
        if(lines[i].length <= settings.charactersPerLine){
            continue;
        }

        var j = 0,
            space = settings.charactersPerLine;

        while(j++ <= settings.charactersPerLine){
            if(lines[i].charAt(j) === ' '){
                space = j;
            }
        }

        lines[i+1] = lines[i].substr(space) + (lines[i + 1] || '');
        lines[i] = lines[i].substr(0, space);
    }

    _this.value = lines.join('\n');

    if(cursorPosition == text.length){
        setCaretToPos(_this, cursorPosition + 1);
    }
    else{
        setCaretToPos(_this, cursorPosition);
    }

    _this.style.height = elementHeight;
    _this.style.height = _this.scrollHeight + 'px';
    _this.style.overflow = 'hidden';

    window.scrollTo(scrollLeft, scrollTop);
}
函数调整大小(e){
var text=_this.value,
lines=text.split('\n'),
cursorPosition=$this.getCursorPosition(),
scrollLeft=window.pageXOffset | | |(document.documentElement | | document.body.parentNode | | document.body)。scrollLeft,
scrollTop=window.pageYOffset | | |(document.documentElement | | document.body.parentNode | | document.body);
对于(变量i=0,长度=lines.length;i如果(第[i]行).长度我认为它在做闪烁的事情,因为我替换了文本区域的值。我注意到的另一件事是,当我点击退格按钮时,它正确聚焦。哦,我认为这是因为退格按钮不会触发按键事件,而按键事件又不会调用文本区域的调整大小功能。我如何复制该ef无法避免在输入字符时闪烁?为什么您首先要设置插入符号位置?为什么您不只是设置高度?想知道我遗漏了什么…您尝试的滚动条有什么问题?它似乎在Firefox和Chromesorry中工作,插入符号/文本区域光标不是鼠标光标,但它聚焦在当你键入Ithm的中间部分时,我看到了这个问题。猜想你必须计算文本框中的CARET的大致位置,并通过那个调整你的滚动。