【发布时间】:2017-11-06 15:51:56
【问题描述】:
我一直在尝试构建一个基于 Web 的文本编辑器。作为该过程的一部分,我正在尝试动态创建和修改基于元素的按键事件以进行字体编辑。在这个特定的jsfiddle 示例中,我试图在按下 CTRL+b 并在强元素内设置焦点/插入符号时创建一个强元素,以便后续输入的文本将成为粗体元素的一部分,因此将具有粗体文本。但是我的代码只是创建了一个强大的元素,但没有转移焦点,因此没有文本变得更粗。
在下面的代码中,我正在创建事件侦听器来捕获击键事件
p=document.getElementsByTagName("p")[0];
//console.log(p)
// adding eventlistener for keydown
p.addEventListener("keydown",listener);
// eventlistenerr callback function
function listener(){
e=window.event;
if(e.ctrlKey && e.keyCode==66)
{
console.log("CTRL+B");
// creating bold element
belm=document.createElement("strong");
belm.setAttribute("contenteditable","true")
p.appendChild(belm);
//bug below
// setting focus inside bold element
setfocus(belm,0);
e.preventDefault();
}
}
这里是设置焦点的功能。
function setfocus(context, position){
var range = document.createRange();
position =position || 0;
var sel = window.getSelection();
range.setStart(context, position);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
context.focus();
}
但是,我毫不怀疑设置焦点的功能有问题,因为如果您观察到小提琴,我已经创建了一个单独的设置来测试这个 出去。单击“单击此处”按钮,焦点动态转移到段落元素,没有任何麻烦。我无法弄清楚出了什么问题。
【问题讨论】:
标签: javascript jquery html contenteditable rich-text-editor