如何隐藏和显示 SummerNote 工具栏以响应焦点和模糊事件

Posted

技术标签:

【中文标题】如何隐藏和显示 SummerNote 工具栏以响应焦点和模糊事件【英文标题】:How to hide and show SummerNote toolbar in response to focus and blur events 【发布时间】:2021-01-26 06:24:16 【问题描述】:

如何隐藏或显示 SummerNote 工具栏以响应焦点或模糊事件?我有一些带有 3 个或更多文本区域的表单,我希望仅在焦点区域上看到工具栏。我在 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
        );
      
    
  );

没有结果

【问题讨论】:

我正在寻找相同类型的功能。你找到解决方案了吗? 【参考方案1】:

如果您只需要隐藏工具栏,您可以更改样式并添加 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");
        
      
);

如果您需要平滑过渡,您可以随意调整高度而不是显示方式

代码笔: https://codepen.io/guilherme-flores/pen/dyvQrKW

【讨论】:

我不知道如何在我的情况下使用此代码。你能解释一下吗...谢谢 @M.Colosso 我添加了进一步的解释,基本上,当您启动summernote 时,您注册到回调onBlur 函数,然后再次获取summernote 并附加到焦点事件。您可以将此代码添加到您的 $(document).ready 函数中 你不需要airMode,我发现要改变你需要的airmode确实破坏了summernote并重新构建它,所以我认为改变样式更容易。跨度> 你能把@M.Colosso标记为正确答案吗?

以上是关于如何隐藏和显示 SummerNote 工具栏以响应焦点和模糊事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs中显示包括图像和格式的summernote编辑器数据的预览?

如何更改 Summernote 中的默认文本突出显示颜色?

如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar

Summernote 自定义工具栏

如何将数据库填充的summernote字段显示到页面

Summernote 将字母间距添加到工具栏