4

テキストエリアと jQuery 検証プラグイン ( http://bassistance.de/jquery-plugins/jquery-plugin-validation/ )で CKEditor を使用しています。

jQuery プラグインを使用すると、フィールドを空または必須としてマークできます。「製品名」などのフィールドが空の場合、フォームの送信時にフィールドは無効としてマークされます。

ただし、「製品名」を入力すると、入力中にフィールドが自動的に有効としてマークされます。それは素晴らしいことですが、CKEditor 対応のテキストエリアでも同じようにしたいと考えています。すべてがプレーンなテキストエリアでうまく機能します (テキストを入力すると、フィールドが有効になります) が、テキストエリアに CKEditor を追加すると、これは機能しなくなります。

それ以降は、CKEditor テキストエリアが再検証される前に送信ボタンをクリックする必要があります。

これをどのように機能させることができるかについてのアイデアはありますか?

アップデート:

あなたがくれたスレッドから解決策を試しましたが、うまくいきません: Using jQuery to Grab the content from CKEditor's iframe

私は持っている:

CKEDITOR.instances["page_content"].document.on('keydown', function(event)
                {
                    CKEDITOR.tools.setTimeout( function()
                    { 
                        $("#page_content").val(CKEDITOR.instances.page_content.getData()); 
                    }, 0);
        });

しかし、それは私に与え続けます:「CKEDITOR.instances.page_content.documentは未定義です」

私のテキストのIDは「page_content」です

これはボタンをクリックした後は正常に機能しますが、ご覧のとおり、何らかの方法でキーダウンイベントをトリガーする必要があります

$("#btnOk").click(function(event) {
            CKEDITOR.instances.page_content.updateElement(); //works fine
});

更新 2:

このコードは正しく、CKEDITOR からテキストエリアにデータを取得しますが、まだ検証プラグインで何も起こっていません。テキストを入力してください

CKEDITOR.instances["page_content"].on("instanceReady", function()
        {
                //set keyup event
                this.document.on("keyup", updateTextArea);
                 //and paste event
                this.document.on("paste", updateTextArea);
                
        });

        function updateTextArea()
        {
            CKEDITOR.tools.setTimeout( function()
                    { 
                        $("#page_content").val(CKEDITOR.instances.page_content.getData());
                    }, 0);  
        }
4

3 に答える 3

5

jquery 検証プラグインはテキストエリアまたはテキスト フィールドのキーアップ イベントに反応するため、テキストエリアを更新した後にそのイベントをトリガーする必要があります。

これをチェックしてください:

    CKEDITOR.instances["page_content"].on("instanceReady", function()
    {
            //set keyup event
            this.document.on("keyup", updateTextArea);
             //and paste event
            this.document.on("paste", updateTextArea);
            
    });

    function updateTextArea()
    {
        CKEDITOR.tools.setTimeout( function()
                { 
                    $("#page_content").val(CKEDITOR.instances.page_content.getData());
                    $("#page_content").trigger('keyup');
                }, 0);  
    }
于 2009-12-15T21:38:11.483 に答える
2

フォームが送信されたときではなく、フォーカスを失ったときにHTMLを書き戻すようにCKEditorテキストエリアを微調整する必要があります(これがデフォルトで行われると思います)。

誰かが数日前に同様の質問をし、成功したようです。チェックしてください

于 2009-12-15T16:25:03.190 に答える