firefox中的选择和模糊事件

firefox中的选择和模糊事件,firefox,selection,contenteditable,blur,Firefox,Selection,Contenteditable,Blur,我为我的英语不好道歉。 我做了一个简单的wysiwyg文本编辑器,在Firefox浏览器中遇到了一个问题。 如果contenteditable块中的焦点丢失,该函数将保存所选内容,以便稍后通过execCommand将操作应用于该块。在IE11、EDGE、Chrome中,一切都很好,选择被保存,您可以稍后恢复。在Firefox中,如果您单击另一个项目而失去焦点,则会保留此元素的选择,而不是与模糊事件关联的元素。也就是说,事件会延迟触发,并向选择对象写入对所单击元素中范围的引用。这样的错误只有在点击

我为我的英语不好道歉。 我做了一个简单的wysiwyg文本编辑器,在Firefox浏览器中遇到了一个问题。 如果contenteditable块中的焦点丢失,该函数将保存所选内容,以便稍后通过execCommand将操作应用于该块。在IE11、EDGE、Chrome中,一切都很好,选择被保存,您可以稍后恢复。在Firefox中,如果您单击另一个项目而失去焦点,则会保留此元素的选择,而不是与模糊事件关联的元素。也就是说,事件会延迟触发,并向选择对象写入对所单击元素中范围的引用。这样的错误只有在点击失去焦点时才会发生,通过切换点击标签,一切正常

下面是这个bug的一个小例子。问题再次出现在Firefox中

函数sel(){
var选择;
if(document.getSelection!==未定义){
selection=document.getSelection();
if(selection.getRangeAt&&selection.rangeCount){
console.log(selection.getRangeAt(0));
}
}else if(document.selection&&document.selection.createRange){
console.log(document.selection.createRange());
}
};
document.getElementById(“c”).addEventListener(“blur”,sel,{capture:true})
ccccc
bbbbb

Firefox非常失望

函数bindBeforeBlur(dom,回调){
dom.addEventListener('focus',function(){
document.addEventListener('mousedown',回调{
一次:对
})
})
dom.addEventListener('mousedown',函数(e){
e、 停止传播();
})
dom.addEventListener('keydown',函数(e){
如果(e.key==='Tab'){
e、 预防默认值();
}
})
}
var editable=document.getElementById('editable');
var lastRange;
bindBeforeBlur(可编辑,函数(e){
lastRange=window.getSelection().getRangeAt(0);
})
可编辑。focus();
document.getElementById('insert')
.addEventListener('单击',函数()){
var sel=window.getSelection();
选择removeAllRanges();
选择添加范围(最后一个范围);
document.execCommand('insertHTML',false,Date.now()+“”);
})
插入

谢谢你的回答。好决定。我将模糊事件替换为Mouseleave,并检查存储选择范围的变量是否为空。