【发布时间】:2019-01-29 03:15:31
【问题描述】:
我有一个contenteditablediv,里面有divs,如下所示:
<div id="wrapper" contenteditable=true onkeydown="preventTab(event);">
<div id="line1" class="line"></div>
<div id="line2" class="line"></div>
<div id="line3" class="line"></div>
<div id="line4" class="line"></div>
</div>
使用 CSS,使用 ::before 作为行号,如下所示:
现在,我想,每当有人按下制表符时,它会自动插入四个空格而不是制表符。我得到了这个函数,但它在触发事件后什么都不做。
function preventTab(event) {
event = event || window.event;
if (event.keyCode === 9) {
// for loop, so the user can set the amount of spaces they want.
for (let i = 0; i < tabSize; i++) {
let e = new KeyboardEvent("keydown", {
bubbles: true,
code: "Space",
key: " ",
keyCode: 32
});
event.target.dispatchEvent(e);
}
event.preventDefault();
}
}
正如我所说,什么都没有发生(可能是因为isTrusted: false?),也没有抛出任何错误。
顺便说一句,我注意到 this question 具有相同的标题,但这在很大程度上取决于 jQuery 库,我正在寻找一种纯 JavaScript 方法。
【问题讨论】:
-
stackoverflow.com/questions/6637341/… 而不是
\t,放4个空格 -
@IsmaelMiguel a
div没有属性selectionStart和selectionEnd,所以这不起作用:( -
stackoverflow.com/questions/5669448/… 尝试获取选择,看看你能先用它做什么
-
您是否考虑过在内容提交后这样做?这似乎是一种更简单、更强大的处理方式。
标签: javascript html