我正在尝试使用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键或单个
我不知道连续进入是什么意思?也许,您可以使用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>