4

まず最初に、私はjavascriptを初めて使用するので、これが完全な顔の手のひらの質問ではないことを願っています。そうは言っても、次のコードは、ユーザーがエディターをクリックしたときにエディターの値を警告する必要があります。

<script type='text/javascript'>
function openEditor(){
html = "Hello World";
config = {
startupFocus : true
};
editor = CKEDITOR.appendTo( 'textBox', config, html );


 if (editor) {
    editor.on('blur', function(event) {
        var ckvalue = CKEDITOR.instances.editor.getData();
        alert(ckvalue);
    });
 }
}
</script>
<html>
<a href='#' onclick='openEditor()'>Open Editor</a><br />
<div id='textBox'></div>
</html>

代わりにグーグルクロームコンソールレポート:

"Uncaught TypeError: Cannot call method 'getData' of undefined "

今私が変わるとき

var ckvalue = CKEDITOR.instances.editor.getData();

var ckvalue = CKEDITOR.instances.editor1.getData();

できます。私はeditor1インスタンスを宣言したことがないので、これは私を困惑させます。もう少し経験のある人が、editorが機能しないのにeditor1が機能する理由を説明してくれることを期待していました。

これがImが話していることの実例です:http://jsfiddle.net/s3aDC/6/

4

2 に答える 2

5

editorを指すJS変数ですCKEDITOR.instances.editor1。それを参照してくださいeditor === CKEDITOR.instances.editor1 // true

さらに、イベントコールバックはeditorコンテキストで実行されるため、次のことthisを指しeditorます。

editor.on('blur', function(event) {
    var ckvalue = this.getData();
    alert(ckvalue);
});

また、エディターを初期化するときに定義できます。

var editor = CKEDITOR.appendTo( 'textBox', {
    on: {
        blur: function( event ) {
            console.log( this.getData() );
        }
    }
} );

また、コード内のグローバル変数は絶対に避けてください。;)

于 2012-12-28T09:04:23.237 に答える
1

CKEditorは以下からエディター名を取得します:

  1. エディターが「追加」モードでない場合のtextarea/editable要素のidまたはname属性:https ://github.com/ckeditor/ckeditor-dev/blob/master/core/editor.js#L71
  2. 一意のエディター名を生成する関数https://github.com/ckeditor/ckeditor-dev/blob/master/core/editor.js#L97

あなたの場合、エディターはappendTo()メソッドによって作成されるので、CKEditorは自動的に名前を生成します。editor1それeditor2から、などCKEDITOR.instancesのオブジェクトには、その名前ですべてのエディターインスタンスが含まれます。そのため、が存在しCKEDITOR.instances.editor1ます。

editorエディターインスタンスをグローバル変数に割り当てました。ただし、これはエディター名とはまったく異なるものです。エディターインスタンスを必要な数の変数に割り当てることができます。

ところで。var変数を使用する前に、ステートメントを使用して変数を宣言する必要があります。

于 2012-12-28T09:03:19.417 に答える