Summernote 编辑器中的粘贴事件未触发 - 无法获取粘贴值

Posted

技术标签:

【中文标题】Summernote 编辑器中的粘贴事件未触发 - 无法获取粘贴值【英文标题】:Paste event in Summernote editor not firing - can not get paste values 【发布时间】:2018-07-09 01:28:56 【问题描述】:

我正在构建一个使用 Summernote 编辑器 (https://summernote.org/) 的应用程序。

它工作得很好,现在我想处理粘贴事件。想法是我想将内容粘贴为纯文本。此页面中的一些谷歌搜索结果: Paste content as plain text in summernote editor.

这导致了我的问题 - 我试图实现这一点但没有成功。

我的密码:

我在我的 Bootstrap / ASP.NET MVC 应用程序中实现了 Summernote,如下所示(我使用 Summernote 0.8.8):

<div class="form-group mb-3">
        @html.LabelFor(c => c.Content)
        <div class="card-body">
            <form class="form-horizontal form-bordered">
                <div class="form-group row">
                    <div class="col-sm-12">
                        <textarea name="Content" id="summernote" class="summernote" data-plugin-summernote data-plugin-options=' "height": 180, "codemirror":  "theme": "ambiance"  '>
                            @Html.Raw(Model.Content)
                        </textarea>
                    </div>
                </div>
            </form>
        </div>

我现在尝试添加以下代码:

  $('#summernote').summernote(
                onPaste: function (e) 
                    var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');
                    e.preventDefault();
                    document.execCommand('insertText', false, bufferText);
                
            );

但这永远不会被击中。如果我在粘贴函数中创建console.log(),它永远不会命中。

然后我尝试按照 Summernote 网站上的文档进行操作,然后:

 $('#summernote').on('summernote.paste', function(e) 
                var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');
                e.preventDefault();
                document.execCommand('insertText', false, bufferText);
            );

完美,现在事件实际触发了。但是所有这些都变得未定义,因此在 GetData 上失败:

((e.originalEvent || e).clipboardData || window.clipboardData)

所以我得到以下错误:

Uncaught TypeError: Cannot read property 'getData' of undefined
    at HTMLTextAreaElement.<anonymous> (UpdateCommunication?communicationId=65925cb9-4300-439c-8f96-e00de78e1727:291)
    at HTMLTextAreaElement.dispatch (jquery-1.10.2.js:5109)
    at HTMLTextAreaElement.elemData.handle (jquery-1.10.2.js:4780)
    at Object.trigger (jquery-1.10.2.js:5021)
    at HTMLTextAreaElement.<anonymous> (jquery-1.10.2.js:5705)
    at Function.each (jquery-1.10.2.js:671)
    at init.each (jquery-1.10.2.js:280)
    at init.trigger (jquery-1.10.2.js:5704)
    at Context.triggerEvent (summernote-bs4.js:1707)
    at HTMLDivElement.<anonymous> (summernote-bs4.js:4422)

所以我遇到的问题是 *** 上的建议解决方案对我来说永远不会触发 - 回调永远不会命中。如果我关注summernote.paste function、https://summernote.org/deep-dive/#onpaste,粘贴值似乎是未定义的!

【问题讨论】:

【参考方案1】:

你很幸运我今晚能玩到这个:)

似乎 summernote.paste 事件返回了 2 个参数

代替

$('#summernote').on('summernote.paste', function(e) 

使用

$('#summernote').on('summernote.paste', function(e, ne) 

并在 fn 主体中使用 'ne' 而不是 'e'

在这里找到了解决方案: https://github.com/summernote/summernote/issues/303#issuecomment-229823549

【讨论】:

那太好了(双关语:D)!非常感谢你写这篇文章。它起作用了:-)

以上是关于Summernote 编辑器中的粘贴事件未触发 - 无法获取粘贴值的主要内容,如果未能解决你的问题,请参考以下文章

在summernote编辑器中将内容粘贴为纯文本

summernote 所见即所得内容未到达 $_POST

单击外部编辑器时,Angular js Summernote 下拉菜单未关闭

Summernote 编辑器未打开(laravel 5.2)

Summernote 编辑器未在 django 管理页面上显示任何内容

Django-Summernote 编辑器未在管理员中显示