Emojione Area是一款好用的jQuery表情插件,大方简洁而且美观。
但是由于插件使用了contenteditable这个属性,并且使用了::before这个pseudo element,导致firefox的显示bug。具体问题是只要鼠标再次点击这个元素,光标会移到右侧。这个bug属于firefox,并且在ie内核下也可能会显示不正常,只需要google firebox contenteditable cursor就能看到很多反应该bug的信息。
网上给出的contenteditable显示问题解决方法通常是给contenteditable加上position: relative然后给[contenteditable="true"]:empty:before加上position: absolute,但是这种方法会导致placeholder和光标位置异常。
所以目前的解决办法是,给contenteditable绑定mouseup事件,检查如果元素处于:focus状态且没有选中的文字,那么就运行event.preventDefault()来阻止光标异常移动:
$('#emojione-container').emojioneArea({
pickerPosition: 'top',
filtersPosition: 'top',
useInternalCDN: false,
event: {
/**
* @param {jQuery} editor
* @param {Event} event
*/
mouseup: function(editor, event)
{
if (editor.is(':focus')) {
var sel = getSelection().toString();
if (!sel) {
event.preventDefault();
}
}
}
}
});
虽然使用了js但是不会出现显示异常问题,有更好的解决办法欢迎交流指正。

EmojioneArea是一款流行的jQuery表情插件,但存在Firefox显示bug,即光标异常移动问题。本文介绍了一种通过绑定mouseup事件并运行event.preventDefault()来解决此问题的方法。
2655

被折叠的 条评论
为什么被折叠?



