0

わかりましたので、これが私が取り組んでいるものです。これは、影響を受けるテキストエリアのコードです:

<div class="chat">
    <div class="messages"></div>
    <textarea class="entry" name="entry" placeholder="Welcome to the Chat. Enter your message here!"></textarea>
    <script type="text/javascript">
        editor = CKEDITOR.replace('entry');
    </script>
</div>

これは、チャットのすべての関数を呼び出す chat.js ファイルのコードです。

var chat = {}

chat.fetchMessages = function () {
    $.ajax({
        url: 'ajaxchat.php',
        type: 'post',
        data: {
            method: 'fetch'
        },
        success: function (data) {
            $('.chat .messages').html(data);
        }
    });
}

chat.throwMessage = function (message) {
    if ($.trim(message).length != 0) {
        $.ajax({
            url: 'ajaxchat.php',
            type: 'post',
            data: {
                method: 'throw',
                message: message
            },
            success: function (data) {
                chat.fetchMessages();
                chat.entry.val('');
            }
        });
    }
}

chat.entry = $('.chat .entry');
chat.entry.bind('keydown', function (e) {
    if (e.keyCode === 13 && e.shiftKey === false) {
        chat.throwMessage($(this).val());
        e.preventDefault();
    }
});

chat.interval = setInterval(chat.fetchMessages, 5000)
chat.fetchMessages();

現在、このコードはすべて機能していますが、メッセージを送信するためにリターン キーがキャッチされていません。他に何をする必要があるのか​​わからない。CKeditor は、Enter/Return キーを新しい段落として解釈しており、メッセージ データを送信する必要があります。

4

1 に答える 1

1

私が問題を正しく理解していれば、あなたの問題はイベントに関するものです。CKEditor のようなイベントにはバインドしません。textarea 要素を直接使用するのではなく、いくつかの手品を実行して iframe を作成し、独自のイベント処理システムを備えています。13 キー イベントにアタッチするには、次のようにします。

CKEDITOR.on('instanceReady', function(ev) {
    var editor = ev.editor;

    editor.on('key', function(evt) {
        if (evt.data.keyCode === 13) {
            // do your enter handling here
        }
    }
}

関連して、そのような値を取得することも少し奇妙です。それは実際に機能しますか?私はそれをよりCKEditorに似たものに変更します

CKEDITOR.instances.entry.getData();
于 2013-03-23T01:58:22.340 に答える