首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onKeyUp事件如何?

onKeyUp事件如何?
EN

Stack Overflow用户
提问于 2014-04-02 07:46:20
回答 3查看 6.3K关注 0票数 2

此代码段必须将文本从textarea text复制到textarea text_hidden,此代码无需使用ckeditor即可工作。

onKeyUp="document.getElementById('text_hidden').value = this.value;

但是当ckeditor启用

onKeyUp="document.getElementById('text_hidden').value = this.value;不管用。

怎么解决这个问题?

代码语言:javascript
复制
<textarea name="text" id="text" rows="6" cols="80"  onKeyUp="document.getElementById('text_hidden').value = this.value;" ></textarea></p>

<textarea name="text_hidden" id="text_hidden" rows="6" cols="80" ></textarea>

<script>
        CKEDITOR.replace( 'text' ,
        {   
    allowedContent: true,
    enterMode: CKEDITOR.ENTER_BR,

    });
        CKFinder.SetupCKEditor( editor, '/ckfinder/' );
        config.startupPath = "/files/";
</script>
EN

回答 3

Stack Overflow用户

发布于 2015-07-21 23:23:07

下面是我的CKEditor到textarea同步演示,反之亦然:https://jsfiddle.net/ty5ks393/1/。输入三个白框中的一个,查看内容在所有四个容器中的复制。

它使用引导以保持整洁,并显示了经典的和内联的CKEditors。相关部分(没有外部资源、注释和console.logs)在这里提取:

代码语言:javascript
复制
    <div class="row">
        <div class="col-sm-3">
            <h2>TEXTAREA</h2>
            <textarea id="textarea" class="box"></textarea>
        </div>
        <div class="col-sm-3">
            <h2>CK EDITOR INLINE</h2>
            <div contenteditable="true" id="contentedit" class="box"></div>
        </div>
        <div class="col-sm-3">
            <h2>CK EDITOR</h2>
            <textarea id="ckeditor" class="box"></textarea>
        </div>
        <div class="col-sm-3">
            <h2>RESULT DIV</h2>
            <div id="result" class="box"></div>
        </div>  
    </div>

jQuery:

代码语言:javascript
复制
    $(function() {
        CKEDITOR.disableAutoInline = true;
        var ce = CKEDITOR.inline("contentedit", {
            removePlugins: 'toolbar'
        });
        var ck = CKEDITOR.replace('ckeditor').on('change', function(e) {
            if (document.activeElement.nodeName == "IFRAME") {
                var thisHTML = e.editor.getData();
                var tempDiv = $('<div>').html(thisHTML);
                thisText = tempDiv.text();
                $('#textarea').val(thisText);
                $('#contentedit, #result').html(thisHTML);  
            }
        });

        var timer;

        $('#textarea').keyup(function() {
            var _this = this;
            clearTimeout(timer);
            timer = setTimeout(function() {
                var thisText =$(_this).val().replace(/\n/g, "<br/>");
                $('#result, #contentedit').html(thisText);
                CKEDITOR.instances.ckeditor.setData(thisText);
            }, 200);
        });

        $('#contentedit').keyup(function(e) {
            var _this = this;
            clearTimeout(timer);
            timer = setTimeout(function() {
                var thisHTML = $(_this).html();
                var tempDiv = $('<div>').html(thisHTML.replace(/\<\/p\>/g,"</p>\n\n"));
                thisText = tempDiv.text();
                $('#textarea').val(thisText);
                $('#result').html(thisHTML);
                CKEDITOR.instances.ckeditor.setData(thisHTML);
            }, 200);
        });
    });

因此,我使用超时值来避免使用setData()时键控带来的瓶颈。当我使用CKEditor ()从其他容器中更改内容时,我将检测到是否在IFRAME中,以确保在使用setData()从其他容器中更改内容时,不会将内容更改从setData中返回。

我希望这对你们中的一些人有帮助。

票数 3
EN

Stack Overflow用户

发布于 2017-06-23 11:07:19

如果您想将WYSIWYG内容与textarea同步,只需告诉on change事件作为更新基础元素的选项。

代码语言:javascript
复制
CKEDITOR.replace('editor', {
    on: {
          change: function() {
              this.updateElement();    
          }
    }
});
票数 3
EN

Stack Overflow用户

发布于 2014-07-10 07:24:44

在搜索之后,我发现一篇文章(ckeditor-keyup事件)指出,CKEditor api不支持"keyup“事件。只支持侦听keypress事件的"key“方法。

本文作者在对editor.document.on()的回调中使用了editor.setData(‘keyup’),这个回调只有在初始化之后才可用。

我更喜欢在初始化时附加所需的keyup事件,因为他的解决方案不适用于我的用例。我更改了您的代码,如下所示,它对我很好,尽管它实际上并没有附加到keyup事件。

代码语言:javascript
复制
CKEDITOR.replace( 'text' ,
{   
    allowedContent: true,
    enterMode: CKEDITOR.ENTER_BR,
}).on('key',
    function(e){
        setTimeout(function(){
            document.getElementById('text_hidden').value = e.editor.getData();
        },10);
    }
);

没有 setTimeout() 函数, getData() 将不会获取最后一个击键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22804731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档