11

私はすでにたくさん検索しましたが、google-fu 'ingでは結果が得られません:(

初期化プロセスを制御できない既に初期化されたtinyMCEエディターがあるため、次のようなコードはまったく機能しません。

tinyMCE.init({
   ...
   setup : function(ed) {
          ed.onChange.add(function(ed, l) {
                  console.debug('Editor contents was modified. Contents: ' + l.content);
          });
   }
});

jQuery tinymce プラグインが定義されていないため、次のようなコードも機能しません。

$('textarea').tinymce({
    setup: function(ed) {
        ed.onClick.add(function(ed, e) {
            alert('Editor was clicked: ' + e.target.nodeName);
        });
    }
});

つまり、tinymce.something構文を使用する必要があります。

tinyMCE が既に初期化された後で、コールバック関数を tinyMCE イベントにバインドするにはどうすればよいですか?

4

5 に答える 5

15

この投稿は今では古いですが、他の人がこの回答を必要とすると思います. 私は同じ問題を抱えていたので、それを修正するためにこれを行いました:

tinyMCE.init({
        ...
        init_instance_callback : "myCustomInitInstance"
});

http://www.tinymce.com/wiki.php/Configuration3x:init_instance_callbackに基づく

于 2014-01-20T16:11:01.450 に答える
12

console.log() で tinymce オブジェクトをハッキングした後、有効な解決策を見つけました。

setTimeout(function () {
       for (var i = 0; i < tinymce.editors.length; i++) {
             tinymce.editors[i].onChange.add(function (ed, e) {
             // Update HTML view textarea (that is the one used to send the data to server).
         ed.save();
       });
            }
}, 1000);

そのコールバック関数内で、必要なイベント バインディングを設定できます。

tinymce が呼び出された時点ではまだ初期化されていないため、この呼び出しはとの競合setTimeout状態を克服するためのものです。tinymcejQuerytinymce.editors[i].onChange.add()

于 2013-08-29T16:22:06.930 に答える
3

編集: おっと-これは私が見ている別の質問で、WordPress + TinyMCE に固有のものだと思いました。他の人に役立つかもしれないので、ここに答えを残します。

これを行う適切な方法は、WordPress フィルターを使用して tinyMCE init に追加することです。例えば:

PHP (編集ページの読み込み時に実行される functions.php またはその他の場所):

  add_action( 'init', 'register_scripts' );     
  function register_scripts(){
    if ( is_admin() ) {
      wp_register_script(
        'admin-script',
        get_stylesheet_directory_uri() . "/js/admin/admin.js",
        array('jquery'),
        false,
        true
      );
    }
  }

  add_action( 'admin_enqueue_scripts', 'print_admin_scripts' );
  function print_admin_scripts() {        
    wp_enqueue_script('admin-script');
  }

  add_filter( 'tiny_mce_before_init', 'my_tinymce_setup_function' );
  function my_tinymce_setup_function( $initArray ) {
    $initArray['setup'] = 'function(ed){
      ed.onChange.add(function(ed, l) {
        tinyOnChange(ed,l);
      });
    }';
    return $initArray;
  }

JavaScript (/js/admin/admin.js)

  (function($){
    window.tinyOnChange = function(ed, l){        
      console.log('Editor contents was modified. Contents: ' + l.content);      
    }
  }(jQuery);

これは WordPress 3.9 でテストされ、機能しています (ただし、コンソール出力を取得しているだけです:

Deprecated TinyMCE API call: <target>.onChange.add(..) 

しかし、それはあなたが使おうとしているtinyMCE非推奨コードによるものです。このメソッドは、tinyMCE の初期化オプションのいずれかに変更するために引き続き機能します。現在、このメソッドを使用しており、うまく機能していますinit_instance_callback

-トーマス

于 2014-07-30T18:50:08.880 に答える
2

TinyMCE 4 では、onChange は存在しません。以下を使用する必要があります。

tinymce.get('myeditorname').on("change", function() { alert("stuff"); });
于 2016-10-12T17:30:26.970 に答える