2

私はどこでもこれの解決策を探しましたが、答えが見つからなかったので、あなたは私の最後の希望です、Stackoverflow ...

cleditorに関して、「ソースの表示」モードで「inserthtml」コマンドを機能させる方法を知っている人はいますか?

現在、ボタンの onclick ハンドラーにメソッドをアタッチして、クレディターのテキストエリアに文字列を挿入しています。

editor.focus();
setTimeout(function() { editor.execCommand('inserthtml', stringToInsert); }, 0);

上記は通常のリッチ テキスト モードでは問題なく動作しますが、ソース表示モードで実行しようとすると、次のようになります。

  • Firefox では、「inserthtml コマンドの実行中にエラーが発生しました」という小さなメッセージが表示されます。
  • Chrome では、サイレントに失敗します
  • IE の場合:
    • テキストエリアが空の場合、jquery.cleditor.min.js のように見える "y(a).pasteHTML(c)" で Visual Studio のブレークポイントにヒットし、"Microsoft JScript ランタイム エラー: 未特定のエラー" というメッセージが表示されました。 ."
    • テキストエリアに既にテキストが含まれている場合、同じファイルの「a.range[0].select()」でブレークポイントにヒットし、「Microsoft JScript ランタイム エラー: エラー 800a025e のため操作を完了できませんでした」というメッセージが表示されました。
4

1 に答える 1

0

こんにちは、ここと非常に似た問題だと思います

あなたが貼り付けたコードは、この関数の最後にあるボタンクリック関数で実行されると仮定して、追加するだけです

false を返します。

そのようなものを追加します:

関数 someClick(e, データ) {

    // Get the editor
    var editor = data.editor;

   editor.focus();
   setTimeout(function() { editor.execCommand('inserthtml', stringToInsert); }, 0);

   return false;

}

編集:

はい、そう簡単ではありません。通常モードの場合、テキストエリアは実際にはiframeです。ソースモードの場合、テキストエリアは再​​びテキストエリアになるため、内部のデータを編集するには、それを取得できます

$('#mytextarea').val()

最後に何かを追加したい場合は、次を使用できます。

setTimeout(function() {$('#mytextarea').val($('#mytextarea').val()+'aaaaa') }, 3000);    

現在のカーソル位置に挿入したい場合は、これが役立ちます:テキストエリア内のカーソル位置 (x/y 座標ではなく文字インデックス)

于 2012-02-10T11:56:40.187 に答える