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
但是不會出現顯示異常問題,有更好的解決辦法歡迎交流指正。