编辑器在JavaScript中连续按下键时没有显示正确的行号?

问题描述 投票:1回答:1

我正在尝试使用JavaScript构建编辑器。我想在按Enter键时显示行数变化,如1,2,3。当按下输入时我确实计算了换行但问题出现了我连续按压输入然后按1,2,12这样的换行顺序作为键盘事件当时不能正常工作。

我在html中使用textarea

    <div class="editor-flex">
        <div id="editor-numbering">
            <div>1</div>
        </div>
        <div class="editor-block">
            <textarea name="text" id="editor"></textarea>
        </div>
        <div class="output">
            Preview
        </div>
    </div>

这里的main.js文件是创建存储新行的div

let editor =  document.getElementById("editor")
let editorNumbering = document.querySelector('#editor-numbering')
let len =1;

editor.addEventListener('keyup', (event) => {
    // console.log(editor.value)
    let lenNew =  editor.value.split('\n').length //count line change
    console.log(len)
    if(len!=lenNew)
    {    
        let  div = document.createElement('div')
        div.textContent = len+1
        console.log(div)
        editorNumbering.append(div)
    }
    len = lenNew
    console.log(len)

})

预期的结果是连续行计数,就像在任何其他编辑器中显示结果1,2,3,当行更改时连续按Enter键或单个

javascript html editor keyevent
1个回答
1
投票

我不知道连续进入是什么意思?也许,您可以使用keydown事件而不是keyup

let editor =  document.getElementById("editor")
let editorNumbering = document.querySelector('#editor-numbering')
let len =1;

editor.addEventListener('keydown', (event) => {
    // console.log(editor.value)
    let lenNew =  editor.value.split('\n').length //count line change
    //console.log(len)
    if(len!=lenNew)
    {    
        let  div = document.createElement('div')
        div.textContent = len+1
        //console.log(div)
        editorNumbering.append(div)
    }
    len = lenNew
    //console.log(len)

})
<textarea id="editor"></textarea>
<div id="editor-numbering"></div>
© www.soinside.com 2019 - 2024. All rights reserved.