问题描述
如何隐藏或显示SummerNote工具栏以响应焦点或模糊事件?我有一些具有3个或更多textareas的表格,我只想在重点区域中看到工具栏。我在Django表单上使用Bootstrap和SummerNote。
我尝试过:
// Select all textarea tags in the form
var elements = $( "textarea" );
// Loop through all textarea elements
for (var i = elements.length - 1; i >= 0; i--) {
var element = elements[i];
$( '#' + element.id ).summernote({
airMode: false,// <-- False: Show toolbar; True: Hide toolbar
toolbar: [
['style',['style']],['font',['bold','italic','subscript','superscript','clear']],['color',['color']],['para',['ol','ul','paragraph']],['table',['table']],['insert',['hr']],['view',['fullscreen']]
],callbacks: {
onFocus: function() {
$( '#' + this.id ).summernote({
airMode: false
});
},onBlur: function() {
$( '#' + this.id ).summernote({
airMode: true
});
}
}
});
}
没有结果
解决方法
如果您只需要隐藏工具栏,您可以更改样式并添加 display: none 到工具栏 div,聚焦时删除样式,模糊时将其添加回来。
我正在做的基本上是获取 onBlur 回调事件(当您在 summernote 组件外部单击时调用它。我正在获取 ParentNode 并比较用户是否单击工具栏,如果不是我找到的任何一个.note-toolbar 类的孩子和我更改为显示:无,这将仅隐藏工具栏。
在 onFocus 上,即使我做相反的事情,我也得到了笔记编辑器并将显示更改为阻止
$('.summernote').summernote({
toolbar: [
['style',['style']],['font',['bold','italic','subscript','superscript','clear']],['color',['color']],['para',['ol','ul','paragraph']],['table',['table']],['insert',['hr']],['view',['fullscreen']]
],callbacks: {
onBlur: function (e) {
var p = e.target.parentNode.parentNode
if (!(e.relatedTarget && $.contains(p,e.relatedTarget))) {
$(this).parent().children('.note-editor').children('.note-toolbar').css("display","none");
}
},onFocus: function (e) {
$(this).parent().children('.note-editor').children('.note-toolbar').css("display","block");
}
}
});
如果你需要一个平滑的过渡,你可以随意改变高度而不是它的显示方式