javascript - 在 JavaScript 中连续按下输入键时编辑器没有显示正确的行号?
问题描述
我正在尝试使用 JavaScript 构建编辑器。我想在按 Enter 时显示行数,如 1、2、3 行更改。按下回车时我确实计算了换行但是出现了问题我连续按下回车然后换行的顺序像 1,2,12 因为 keyup 事件当时不起作用,因为连续按下。
我在 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
event 而不是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>
推荐阅读
- rest - AWS ALB 后面的微服务(ish)设置中的健康检查路由组织
- typescript - TypeScript 中的“复合类型”
- sql-server - 如何将多月数据放入多列
- git - 使用 Visual Studio 代码在 Visual Studio Team Server(或 gitlab)上创建远程 git 存储库
- c++ - 在排序的文本文件中实现二进制搜索?
- angularjs - 使用 ng-options 和 'as' 设置标签('track by' 替代方案)
- python - 从 Sage 中提取单一解决方案
- javascript - React 中状态更新时动态更改获取请求 url
- events - Google 表格 onEdit 事件不起作用
- android - google sheet自定义菜单功能在android上的google sheet中不可见