2

フォームのテキストエリアでjwysiwygプラグインを使用しています(jwysiwyg:https ://github.com/akzhan/jwysiwyg )

フォームにあるテキストエリアの変更を検出したい。

通常、標準の非wysiwyg textareaを使用して、次のことを行います。

$('textarea').change(function(e){
    alert('Something changed!');
 });

これは、jwysiwygのDOM操作が原因で、jwysiwygが使用されている場合には効果がないことがわかります。

誰かがポインタを持っていますか?

4

3 に答える 3

4

このコードを使用してください。help/example/ 01.basic.htmlと02.full.htmlでテストしましたが、他のコードでも機能すると思います。

$(document).ready(function(){
var current = $("#wysiwyg-wysiwyg-iframe").contents().find('html');

     function detectFn(){
          alert('Detected');
       } 

       var timer;

    current.bind({    
                keyup: function(){
                    clearTimeout(timer);
          timer = setTimeout(detectFn, 2000)

                }
    });

});

ソース
Yasir LaghariとGhommeyは、このソリューションの真の功績を認めています。

jQuery / JavaScript:iframeのコンテンツへのアクセス

キーを押すと、X秒後に停止すると関数が呼び出されます

説明

1)「jwysiwygプラグイン」は、iframeのテキストエリアを置き換えることを目的としています。テキストは「p」タグ内にあります。もう1つ考慮すべき点は、このタグはクリックできないことです。テキストをクリックすると、実際にクリックしているのは「iframedhtml」タグです。

2)jQueryがiframed要素にアクセスして選択するには、「contents()」メソッドを使用する必要があります。そうすれば、iframeでいくつかの関数のトリガーを開始できます。

3)偽のテキストエリアの変更を検出した後に使用するコードを実行するdetectFn()を作成します。

4)変数「timer」を宣言します。

5)keyupイベントを使用するには、bind()メソッドを「iframedhtml」タグとともに使用する必要があります。このようにして、テキストエリアの入力アクションがシミュレートされます。

6)各キーアップは検出関数を複数回実行します。これを防ぐために、setTimeoutメソッドを使用して、detectFnを変数「timer」に格納します。最後に、変数を引数としてclearTimeoutに渡す必要があります。そうすれば、各キーアップによって、検出関数の前回の実行がキャンセルされます。

于 2012-01-28T09:04:52.680 に答える
1

私はこれがはるかに簡単であることがわかりました:

    $('#editor_textarea').wysiwyg('document').keypress(function(e) {
        e.preventDefault(); //This will cancel the keypress
        alert('Keypress in jwysiwyg editor detected!');
    });
于 2012-05-06T15:27:43.600 に答える
0

autoSaveをtrueに設定して、次のようにすることができます。

$(element).wysiwyg('getContent')。afterSave(function(){/マジック/}

必要に応じて、このハンドラーで要素の「変更」をトリガーできます

于 2014-07-08T06:01:34.060 に答える